0

我阅读了这两篇文章 1.此处和 2.此处,以了解当服务器上的 API 使用基于声明的自定义授权并且调用它的 Xamarin 客户端使用MobileServiceClient框架时,对 Azure 移动应用程序执行身份验证的最佳方法。我无法最终确定这些链接中的两个示例中哪一个是更好的方法。

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

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

4

1 回答 1

2

正如您所暗示的,第一篇文章展示了自定义身份验证。第二篇文章展示了应用服务身份验证,它有一个已知列表。如果您需要自定义用户名/密码,请使用前者。如果您需要使用社交身份验证或企业身份验证,请使用后者。

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

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

在所有情况下,您都将需要特定于平台的代码——这意味着使用DependencyService(如第二个示例中所示)来执行您的登录代码。我通常创建一个将 MobileServiceClient 包装在 PCL 中的单例类。然后创建一个 ILoginProvider 接口,其中包含 LoginAsync/LogoutAsync 代码来处理平台依赖代码。然后我的单例类调用 DependencyService 来获取代码。您可以在我的GitHub 存储库中找到涵盖 iOS、Android 和 UWP的示例。

于 2016-06-07T18:27:10.940 回答