C# 在Azure移动应用程序服务客户端中,如何设置用户ID以使loginAsync正常工作?

C# 在Azure移动应用程序服务客户端中,如何设置用户ID以使loginAsync正常工作?,c#,authentication,xamarin.forms,azure-mobile-services,C#,Authentication,Xamarin.forms,Azure Mobile Services,我正在Azure中使用.NET后端的Xamarin.Forms应用程序中实现自定义身份验证,一些控制器标记为[Authorize]。我遵循了大量博客和文章的说明,但仍不清楚如何进行未经授权的TableController调用以触发登录屏幕,或者如何访问相同的身份验证子系统loginAsync设置用户ID或令牌信息,以便MobileServiceClient的多个实例保留最新的用户ID和MobileServiceAuthenticationToken值。如何正确触发登录页面并更新同一身份验证子系统

我正在Azure中使用.NET后端的Xamarin.Forms应用程序中实现自定义身份验证,一些控制器标记为[Authorize]。我遵循了大量博客和文章的说明,但仍不清楚如何进行未经授权的TableController调用以触发登录屏幕,或者如何访问相同的身份验证子系统loginAsync设置用户ID或令牌信息,以便MobileServiceClient的多个实例保留最新的用户ID和MobileServiceAuthenticationToken值。如何正确触发登录页面并更新同一身份验证子系统MobileServiceClient与其他OOTB提供商访问中的用户ID/令牌

当您的移动应用程序尝试访问标有[Authorize]的后端,但未提供授权标头(从技术上讲,是带有有效JWT的X-ZUMO-AUTH标头)时,该服务返回401个未经验证的。有很多方法可以解决这个问题,但是您的操作会失败(在Xamarin.Forms应用程序中,这将导致MobileServiceInvalidOperationException)。您需要处理这种情况,调用loginAsync(),然后重试该操作


您不应该有多个MobileServiceClient—您应该在全局范围内有一个(使用DI将其注入,或者在应用程序上下文中将其设置为静态)。MobileServiceUser将被生成的所有表使用。

我已经寻找了几个月的答案。捕获MobileServiceInvalidOperationException的最佳方法是什么?我正在考虑创建一个自定义属性,用PostSharp之类的东西来装饰[安全]函数或类,这样我就可以将身份验证代码保存在一个地方。我见过的另一种方法是DelegatingHandler,它通过代理响应和手动添加X-ZUMO-AUTH头(James Montemagno的la CofeeCups)来完全替换身份验证。您有没有推荐的捕获401状态并调用loginAsync的方法?我的建议是显式登录。我在UI中有一个图标,当我单击它时,它会调用loginAsync()。