一段时间以来,我一直在尝试对Azure应用服务的请求进行身份验证,但我完全感到困惑,我似乎无法让Microsoft.Azure.Mobile.Client接受并成功验证已知的“好”令牌。
总体而言,我想要做的就是能够成功拉起Xamarin Forms中的Web浏览器,通过Azure,Google或其他社交身份验证对用户进行身份验证,然后使用令牌针对Azure应用服务(EasyTables)进行身份验证),我已经在运行但未启用身份验证。出于某种原因,我发现的资源都没有提供明确的方法来完成此工作,我将不胜感激。
这是到目前为止我拥有的主要配置:
var locations = (await App.MobileService.GetTable<Location>().ToListAsync());
在App.xaml.cs文件中实例化MobileServiceClient如下:
public static MobileServiceClient MobileService = new MobileServiceClient("https://mywebapp.azurewebsites.net");
如上所述,在访问和保存在线服务时,这种方法很好用。
要转到Azure门户,我已在“设置->身份验证/授权”下激活了“应用程序服务身份验证”,并且还设置了Azure Active Directory身份验证提供程序。在该提供程序下,我已经设置了Azure Active Directory实例的客户端ID(在“管理->应用程序注册”下)。
回到Xamarin,我已经成功地使用Steven Thewissen here的方法对此进行了身份验证。特别是,我创建了一个“ MSAuthService”帮助程序,该帮助程序成功启动了Web浏览器,使您可以使用Microsoft凭据登录,随后它就可以从Microsoft Graph中检索您的帐户名和其他内容-包括Access令牌。
我现在正尝试使用此访问令牌登录到我用于访问EasyTables的MobileService,使用以下操作:
JObject auth_token_jobject = new JObject();
auth_token_jobject["authenticationToken"] = token;
var output = await App.MobileService.LoginAsync(
MobileServiceAuthenticationProvider.MicrosoftAccount,
auth_token_jobject);
但是,每当执行此操作时,仍然会收到上面最后一行所产生的“未经授权”错误。
我知道其他人(例如here似乎也有同样的问题,但该帖子没有解决方法。
我尝试过的其他事情,但未能完全完成。如上所述,尽管通过Microsoft Graph而不是通过我的Web服务成功进行身份验证,但我得到的最接近的过程是:
await WebAuthenticator.AuthenticateAsync
方法的过程似乎比我上面使用的示例简单得多,但是没有似乎没有提供有关如何生成调用身份验证页面所需的URI的任何详细信息,也没有提供有关如何实现它的逐步指南。无论哪种方式,我都没有设法使其正常工作... 如果有人能够轻松地获取有效令牌,然后将其提供给MobileService客户端,我将不胜感激。我怀疑这很简单,例如从上面的Xamarin Essentials WebAuthenticator中取回令牌,然后将其与var output = await App.MobileService.LoginAsync(MobileServiceAuthenticationProvider.MicrosoftAccount,auth_token_jobject)
一起传递,但到目前为止我似乎无法正常工作。
非常感谢!
Oliver。
答案 0 :(得分:0)
这里有几个问题(重读几次)
MobileServiceAuthenticationProvider.MicrosoftAccount
- 您应该使用“aad”。如果您取回的令牌确实是 MSA 令牌,那么您仍然需要提供 access_token 字段(而不是 authenticationToken 字段)
如果你不需要任何特别的东西,你应该可以像这样使用 .login() :
await App.MobileService.LoginAsync("aad", "your-method");
有关这方面的更多详细信息,请参阅其中一份认证