如何在Azure Mobile App Services中装饰客户端方法以包装身份验证



所讨论的系统是一个带有C#5.0/MVC 5.0/Web API 2.0后端的移动应用程序服务Xamarin.Forms应用程序。该应用程序使用LoginAsync在客户端进行自定义身份验证,并在后端的ApiController和TableController类和方法上使用"[授权]"装饰。当前没有自动工作流在后台调用返回未授权HTTP状态代码时显示自定义身份验证屏幕。在客户端上为进行数据库调用的每个方法添加下面的身份验证代码是重复和庞大的。我想创建一个自定义的客户端属性(或等效属性),该属性可用于修饰客户端类或方法,如果给出未经授权的响应,这些类或方法将处理身份验证。

包装的方法应该在功能上进入这个结构:

try { ... // Decorated, attributed, or wrapped method } catch(MobileServiceInvalidOperationException msioe) { if(msioe.Response.StatusCode == HttpStatusCode.Unauthorized) { ... // Perform login activities } }

如何实现将相同的身份验证代码应用于所选方法的简单方法(例如,使用从IActionFilterAttribute或IAuthenticationFilter派生的自定义属性)?

实现这一点的最简单方法是添加一个委派处理程序,该处理程序捕获401响应并启动身份验证流。以下是如何做到这一点的示例:https://github.com/azure-appservice-samples/ContosoMoments/blob/dev/src/Mobile/ContosoMoments/AuthHandler.cs.

要使用,请将其作为参数添加到MobileServiceClient构造函数调用中:

new MobileServiceClient(URL, new AuthHandler());

最新更新