使用 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。
我阅读了这两篇文章 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。