【问题标题】:How to link different authentication providers in azure mobile services如何在 Azure 移动服务中链接不同的身份验证提供程序
【发布时间】:2015-04-26 11:11:59
【问题描述】:

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

如果用户 1 选择在他的手机上使用 Facebook 进行身份验证并向应用程序添加一些信息,然后他(用户 1)尝试在他的平板电脑上使用谷歌登录,他将看不到他的信息。因为他们是两个不同的用户,拥有不同的令牌。而且我想从身份验证提供商(电子邮件)那里获取一些额外的信息,并拥有自己的用户表,其中包含为用户共享的电子邮件和其他配置文件信息,无论他使用什么提供商。我怎样才能实现它?

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

【问题讨论】:

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


    【解决方案1】:

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

    这里的重要细节是移动服务令牌映射到单个提供商身份。如果查看用户 ID,它实际上是 provider:providerID。所以我们需要获取两个token并一起验证,才能关联两个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 限制为 AuthorizationLevel.User 来隐式验证新的)

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-01-20
      • 2018-10-31
      • 2017-05-28
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多