3

蔚蓝移动服务中使用不同身份验证提供程序(Facebook,Google,Windows e.t.c)的最佳做法是什么,并且明白这三个登录名属于同一用户。如何在蔚蓝移动服务中链接不同的身份验证提供商

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

P.S.我使用.NET作为后端,Windows Phone作为客户端

回答

2

这里没有开箱即用的解决方案。通过使用查找表可以更好地满足您的需求,该查找表将您定义的静态用户标识映射到不同的标识提供程序标识。然后,无论您在哪个位置依赖用户标识,都会执行查找以将当前用户标识与静态标识符进行匹配。您的用户标识是存储在数据库中其他任何地方的标识。

这里的重要细节是移动服务令牌映射到单个提供者标识。如果您查看用户标识,它实际上是provider:providerID。所以我们需要获得两个令牌并一起验证,以便关联两个ID。

在客户端上,您必须手动提示用户链接帐户。在此过程中,您会将当前令牌存储在内存中,使用新的提供程序登录,然后在后台进行调用并调用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(新的一个隐含地通过限制API来AuthorizationLevel.User验证),您可以使用验证令牌:

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

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

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

相关问题