authentication - 如何在azure移动服务中链接不同的身份验证提供商

标签 authentication azure azure-mobile-services facebook-authentication google-authentication

在 Azure 移动服务中使用不同的身份验证提供商(Facebook、Google、Windows 等)并了解这三个登录属于同一用户的最佳实践是什么。

开箱即用,如果用户1选择在手机上使用Facebook进行身份验证并向应用程序添加一些信息,然后他(用户1)尝试在平板电脑上使用Google登录,他将看不到自己的信息。因为他们是两个不同的用户,拥有不同的代币。我想从身份验证提供商(电子邮件)获取一些附加信息,并拥有自己的用户表,其中包含为用户共享的电子邮件和其他个人资料信息,无论他使用哪个提供商。我怎样才能实现它?

附注我使用 .NET 作为后端,Windows Phone 作为客户端

最佳答案

这里没有开箱即用的解决方案。使用查找表可能会为您提供最好的服务,该表将您定义的静态用户 ID 映射到不同的身份提供商 ID。然后,在任何依赖用户 ID 的地方,您都将进行查找以将当前用户身份与静态标识符相匹配。您的用户 ID 存储在数据库中的其他位置。

这里的重要细节是移动服务 token 映射到单个提供商身份。如果你看一下用户ID,它实际上是provider:providerID。所以我们需要获取两个token并一起验证,以便关联两个ID。

在客户端上,您必须手动提示用户链接帐户。在此过程中,您将把当前 token 存储在内存中,使用新的提供程序登录,然后调用后端上的 API 来进行关联。

string existingToken = App.MobileService.CurrentUser.MobileServiceAuthenticationToken;
App.MobileService.Logout(); // allows login with new provider
await App.MobileService.LoginAsync("google");
await App.MobileService.InvokeApiAsync("associateToken", existingToken);

在服务器上,您需要能够验证 existingToken(通过将 API 限制为 AuthorizationLevel.User 来隐式验证新 token )

在该 API 中,您可以使用以下方法验证 token :

IServiceTokenHandler handler = this.Request.GetConfiguration().DependencyResolver.GetServiceTokenHandler()
ClaimsPrincipal claimsPrincipal;
bool didValidate = handler.TryValidateLoginToken(existingToken, ConfigurationManager.AppSettings["MS_MasterKey"], claimsPrincipal);

您可能还应该在查找表中查找用户 ID 以避免冲突。

总的来说,这是一个可能的解决方案的粗略草图。不幸的是,没有更多的交 key 服务。

关于authentication - 如何在azure移动服务中链接不同的身份验证提供商,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28702414/

相关文章:

android - Login with Facebook option trigger 建议下载一个应用程序

python - 使用 Selenium Chrome 的代理 SOCKS 5 身份验证

c# - 如何在windows azure中部署asp.net网站

c# - Azure 移动应用程序 - 自定义身份验证 - 无法登录

java - 首次授权 Mifare Plus 卡

ios - 你如何预授权一个 facebook 对话框——比如一个请求?

azure - 在 Azure StorageClient 上执行加入

android - 如何在 Azure Active Directory 中使 native 客户端应用程序成为单租户?

authentication - 为 Azure 中的移动服务使用 Facebook 进行身份验证

ios - 使用Azure移动服务sdk在iOS中并行调用