微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Azure EasyTables进行身份验证-Azure ActiveDirectory

如何解决使用Azure EasyTables进行身份验证-Azure ActiveDirectory

一段时间以来,我一直在尝试对Azure应用服务的请求进行身份验证,但我完全感到困惑,我似乎无法让Microsoft.Azure.Mobile.Client接受并成功验证已知的“好”令牌。

总体而言,我想要做的就是能够成功拉起Xamarin Forms中的Web浏览器,通过Azure,Google或其他社交身份验证对用户进行身份验证,然后使用令牌针对Azure应用服务(EasyTables)进行身份验证),我已经在运行但未启用身份验证。出于某种原因,我发现的资源都没有提供明确的方法来完成此工作,我将不胜感激。

这是到目前为止我拥有的主要配置:

  1. 我有一个应用程序可以成功读取数据表并将其保存到Azure托管EasyTables实现中。使用标准格式读取(或写入)表:
var locations = (await App.MobileService.GetTable<Location>().ToListAsync());

在App.xaml.cs文件中实例化MobileServiceClient如下:

public static MobileServiceClient MobileService = new MobileServiceClient("https://mywebapp.azurewebsites.net");

如上所述,在访问和保存在线服务时,这种方法很好用。

  1. 要转到Azure门户,我已在“设置->身份验证/授权”下激活了“应用程序服务身份验证”,并且还设置了Azure Active Directory身份验证提供程序。在该提供程序下,我已经设置了Azure Active Directory实例的客户端ID(在“管理->应用程序注册”下)。

  2. 回到Xamarin,我已经成功地使用Steven Thewissen here方法对此进行了身份验证。特别是,我创建了一个“ MSAuthService”帮助程序,该帮助程序成功启动了Web浏览器,使您可以使用Microsoft凭据登录,随后它就可以从Microsoft Graph中检索您的帐户名和其他内容-包括Access令牌。

  3. 我现在正尝试使用此访问令牌登录到我用于访问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服务成功进行身份验证,但我得到的最接近的过程是:

  1. 使用EasyTables等here进行授权的概述-尽管这似乎并未为Xamarin提供任何明确的身份验证代码
  2. 最新的Xamarin博客和说明材料(herehere,但是尽管使用await WebAuthenticator.AuthenticateAsync方法的过程似乎比我上面使用的示例简单得多,但是没有似乎没有提供有关如何生成调用身份验证页面所需的URI的任何详细信息,也没有提供有关如何实现它的逐步指南。无论哪种方式,我都没有设法使其正常工作...

如果有人能够轻松地获取有效令牌,然后将其提供给MobileService客户端,我将不胜感激。我怀疑这很简单,例如从上面的Xamarin Essentials WebAuthenticator中取回令牌,然后将其与var output = await App.MobileService.LoginAsync(MobileServiceAuthenticationProvider.MicrosoftAccount,auth_token_jobject)一起传递,但到目前为止我似乎无法正常工作。

非常感谢!

Oliver。

解决方法

这里有几个问题(重读几次)

  1. 您正在使用 MobileServiceAuthenticationProvider.MicrosoftAccount - 您应该使用“aad”。
  2. AAD 需要访问令牌 - 有关需要提供的内容的详细信息,请参阅 https://docs.microsoft.com/en-us/azure/app-service/app-service-authentication-how-to#validate-tokens-from-providers

如果您取回的令牌确实是 MSA 令牌,那么您仍然需要提供 access_token 字段(而不是 authenticationToken 字段)

如果你不需要任何特别的东西,你应该可以像这样使用 .login() :

await App.MobileService.LoginAsync("aad","your-method");

有关这方面的更多详细信息,请参阅其中一份认证

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?