【发布时间】:2021-02-01 01:11:23
【问题描述】:
一段时间以来,我一直在尝试对 Azure 应用服务的请求进行身份验证,但我完全被难住了,我似乎无法让 Microsoft.Azure.Mobile.Client 接受并成功针对已知的“好”令牌。
总的来说,我想要的只是能够在 Xamarin Forms 中成功启动 Web 浏览器,使用 Azure、Google 或其他社交身份验证对用户进行身份验证,然后使用令牌针对 Azure 应用服务(EasyTables ),我已经在运行但没有启用身份验证。出于某种原因,我发现的任何资源都没有提供明确的方法,如果您能提供任何帮助,我将不胜感激。
这是我目前的主要配置:
- 我有一个应用程序成功读取数据表并将其保存到 Azure 托管的 EasyTables 实施。使用标准格式读取(和写入)表格:
var locations = (await App.MobileService.GetTable<Location>().ToListAsync());
MobileServiceClient 在 App.xaml.cs 文件中实例化如下:
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 中检索您的帐户名和其他一些东西——包括访问令牌。
-
我现在正在尝试使用此访问令牌登录到我用来访问 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 服务成功进行身份验证,我得到的最接近的是上述过程:
- 使用 EasyTables 等进行授权的概述 here - 尽管这似乎没有为 Xamarin 提供任何明确的代码来进行身份验证。
- 最新的Xamarin博客和说明材料(here和here,但是虽然使用
await WebAuthenticator.AuthenticateAsync方法的过程看起来比我上面使用的例子简单很多,但似乎没有任何细节提供了有关如何生成调用身份验证页面所需的 URI,也没有提供如何实现它的分步指南。无论哪种方式,我都没有设法让它工作......
如果有人有一种简单的方法来获取有效令牌,然后将其提供给 MobileService 客户端,我将不胜感激。我怀疑获取回调的令牌很简单,例如从上面的 Xamarin Essentials WebAuthenticator 中,然后使用 var output = await App.MobileService.LoginAsync(MobileServiceAuthenticationProvider.MicrosoftAccount,auth_token_jobject) 传递它,但到目前为止我似乎无法让它工作。
非常感谢!
奥利弗。
【问题讨论】:
-
你好,你看看this discussion,有没有帮助?
-
您看过关于身份验证的书籍章节吗? adrianhall.github.io/develop-mobile-apps-with-csharp-and-azure - 第 2 章明确介绍了这种情况。此外,如果您使用弹出窗口,则不需要使用 WebAuthenticator - 它已经为您执行此操作。
标签: azure xamarin.forms azure-web-app-service forms-authentication azure-mobile-services