这里没有开箱即用的解决方案。通过使用查找表可以更好地满足您的需求,该查找表将您定义的静态用户标识映射到不同的标识提供程序标识。然后,无论您在哪个位置依赖用户标识,都会执行查找以将当前用户标识与静态标识符进行匹配。您的用户标识是存储在数据库中其他任何地方的标识。
这里的重要细节是移动服务令牌映射到单个提供者标识。如果您查看用户标识,它实际上是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以避免冲突。
总的来说,这是一个可能的解决方案的粗略草图。不幸的是,没有更多的交钥匙。