如何修饰客户端方法以在 Azure 移动应用服务中包装身份验证?
How do I decorate a client method to wrap authentication in Azure Mobile App Services?
有问题的系统是移动应用服务 Xamarin.Forms 应用程序,后端为 C# 5.0 / MVC 5.0 / Web API 2.0。该应用程序使用 LoginAsync 在客户端进行自定义身份验证,并在 ApiController 和 TableController 类 和后端方法上使用“[Authorize]”装饰。当前没有 automatic 工作流来在后端调用返回未经授权的 HTTP 状态代码时显示自定义身份验证屏幕。为进行数据库调用的 every 方法在客户端添加下面的身份验证代码是重复且庞大的。我想创建一个自定义的客户端属性(或等效属性),它可用于装饰客户端 类 或在给出未经授权的响应时将处理身份验证的方法。
包装的方法应该在功能上进入这个结构:
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());
有问题的系统是移动应用服务 Xamarin.Forms 应用程序,后端为 C# 5.0 / MVC 5.0 / Web API 2.0。该应用程序使用 LoginAsync 在客户端进行自定义身份验证,并在 ApiController 和 TableController 类 和后端方法上使用“[Authorize]”装饰。当前没有 automatic 工作流来在后端调用返回未经授权的 HTTP 状态代码时显示自定义身份验证屏幕。为进行数据库调用的 every 方法在客户端添加下面的身份验证代码是重复且庞大的。我想创建一个自定义的客户端属性(或等效属性),它可用于装饰客户端 类 或在给出未经授权的响应时将处理身份验证的方法。
包装的方法应该在功能上进入这个结构:
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());