使用 Xamarin 的 Azure 移动应用身份验证

Azure Mobile App Authentication using Xamarin

我阅读了这两篇文章 1.here and 2.here 以找出当服务器上的 API 使用基于声明的自定义授权和调用它的 Xamarin 客户端正在使用 MobileServiceClient 框架。我无法确定 link 中的两个示例中哪一个是更好的方法。

在第一个 link 中,似乎不像在第二个 link 中那样依赖于平台特定代码,这意味着我不需要在其中编写任何代码Driod 或 IOS 或 Windows 项目,并且可以在 class 库本身中完成所有操作。(我就在这里吗?) 此外,第一个 link 似乎不像第二个 link 那样需要任何提供程序,因为我正在调用对 Url 的直接服务调用。另一方面,第二个 link 似乎只支持 Facebook, Twitter, MicrosoftAccount, Google and WindowsAzureActiveDirectory。强制性 MobileServiceAuthenticationProvider 参数似乎没有针对 sql 基于服务器的用户 table 提供自定义身份验证。我不确定这部分,也找不到另外说明的文档。

如果 LoginAsync 不提供自定义身份验证,那么很明显我需要遵循 InvokeApiAsync 路线。如果它确实提供了,那么问题是:我应该像第二个 link 一样在每个目标项目中编写特定于平台的(Droid/IOS/windows)代码,还是应该在 class 中处理所有服务调用] 库是否可以在第一个 link 中显示的示例中完成?换句话说,我应该选择 LoginAsync 还是 InvokeApiAsync?推荐这两种方式中的哪一种?

正如您所暗示的,第一篇文章展示了自定义身份验证。第二篇文章展示了 App Service Authentication,它有一个已知列表。如果您需要自定义 username/password,则选择前者。如果您需要使用社交身份验证或企业身份验证,请使用后者。

我的一般建议是不要要求用户创建另一个用户名,除非您必须这样做 - 这意味着消费者应用程序需要社交身份验证,企业应用程序需要通过 AAD 进行企业身份验证。

我的另一个建议是始终使用客户端 SDK 来完成身份验证部分。这使您可以遵循提供商(facebook、twitter 等)在安全、刷新令牌和其他身份验证要求方面的最新做法。获得提供商令牌后,通过使用带有令牌的 LoginAsync() 可以轻松地将其交换为 Azure 移动令牌。有关这方面的信息,请参阅 Azure Documentation

在所有情况下,您都需要特定于平台的代码 - 这意味着使用涵盖 iOS、Android 和 UWP 的 DependencyService (as in the second example) to execute your login code. I generally create a singleton class that wraps the MobileServiceClient in the PCL. Then create an ILoginProvider interface which has LoginAsync/LogoutAsync code in it to handle the platform dependency code. My singleton class then calls the DependencyService to get the code. You can find an example in my GitHub Repository