【问题标题】:Authenticating with Azure EasyTables - Azure ActiveDirectory使用 Azure EasyTables 进行身份验证 - Azure ActiveDirectory
【发布时间】:2021-02-01 01:11:23
【问题描述】:

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

总的来说,我想要的只是能够在 Xamarin Forms 中成功启动 Web 浏览器,使用 Azure、Google 或其他社交身份验证对用户进行身份验证,然后使用令牌针对 Azure 应用服务(EasyTables ),我已经在运行但没有启用身份验证。出于某种原因,我发现的任何资源都没有提供明确的方法,如果您能提供任何帮助,我将不胜感激。

这是我目前的主要配置:

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

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

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 中检索您的帐户名和其他一些东西——包括访问令牌。

  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) 传递它,但到目前为止我似乎无法让它工作。

非常感谢!

奥利弗。

【问题讨论】:

标签: azure xamarin.forms azure-web-app-service forms-authentication azure-mobile-services


【解决方案1】:

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

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

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

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

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

有关这方面的更多详细信息,请参阅其中的authentica

【讨论】:

    猜你喜欢
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    • 2019-06-03
    相关资源
    最近更新 更多