0

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

在第一个链接中,似乎没有像第二个链接那样依赖特定于平台的代码,这意味着我不需要在Driod或IOS或Windows项目中编写任何代码,并且可以(我是否在这里?) 另外,第一个链接似乎不需要像第二个链接那样的提供者,因为我正在调用对Url的直接服务调用。另一方面,第二个环节似乎只支持Facebook, Twitter, MicrosoftAccount, Google and WindowsAzureActiveDirectory。强制MobileServiceAuthenticationProvider参数似乎没有针对基于用户表的SQL Server提供自定义验证。我不确定这部分,并且找不到其他文档。

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

回答

2

第一篇文章展示了自定义验证,如您所示。第二篇文章展示了具有已知列表的App Service身份验证。如果你需要做一个自定义的用户名/密码,然后去与前者。如果您需要使用社交授权或企业授权,请与后者联系。

我的一般建议是不要求用户创建另一个用户名,除非必须 - 这意味着消费者应用的社会认证和企业应用的AAD的企业认证。

我的其他建议是始终使用客户端SDK做认证部分。这使您可以按照安全,刷新令牌和其他身份验证要求的提供者(Facebook,Twitter等)的最新做法。一旦拥有提供者令牌,通过将LoginAsync()与令牌一起使用,可以轻松将其交换为Azure移动令牌。有关这方面的信息,请参见Azure Documentation

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

+0

你能推荐覆盖两种登录类型的任何模式吗?我目前正在尝试将所有身份验证抽象到单独的类库,但遇到麻烦,因为我需要在基本的可移植库类中定义一个'Auth'接口,该接口从每个目标项目中抽取该接口的设备特定实现.Droid/.IOS /等)现在我的自定义身份验证单独存放在该类库中,而其他Azure提供程序相关的登录代码则分布在解决方案的其余部分。 – user20358

+0

我不得不放弃用于验证的类库,并将该代码放入基本的可移植项目本身。我不确定这是否是好设计。 – user20358

+0

我将我的ILoginProvider接口(它是平台特定的代码实现的基接口)放在基类中 - 不需要单独的PCL。几乎所有我写的代码都在PCL中。 –

相关问题