【问题标题】:Identifying an Authenticated Google User's "Work Account"识别经过身份验证的 Google 用户的“工作帐户”
【发布时间】:2016-03-29 16:27:50
【问题描述】:

我们有一个学习管理系统 (LMS),我们将其推广到组织。所有用户都居住在一个“组织帐户”下,我们的系统上有几千个“组织帐户”。

我们的一个客户使用 Google 作为他们的主要帐户/身份验证系统,因此我们正在实施 OAuth2 作为为这些客户提供单点登录的一种方式。

我已经为我们的平台创建了一个 Google 项目,并且可以成功地使用 Google 让用户使用 openid email profile 范围以标准方式进行身份验证 (https://accounts.google.com/o/oauth2/auth)。假设用户通过 Google 进行身份验证,那么我可以取回访问令牌。

但我的问题是,返回的声明列表不足以让我确定 Google 帐户属于哪个组织。我认为“托管域”声明可能会将 google 帐户唯一标识为我们客户的工作帐户,但是如果用户使用别名电子邮件地址而不是工作的“主电子邮件”地址登录,那么托管域将不正确。

我需要一种方法来发现经过身份验证的 Google 帐户属于哪个“工作帐户”,以便我可以将其映射到我平台上的正确组织。

一个例子会帮助我思考:

  1. 我们的客户叫“ABC Ltd”
  2. 他们有一个 Google Work 帐户,每个人的主要电子邮件地址(域)都是“...@abc.com”。用户还有电子邮件别名(“...@anotherdomain.com”、“...@gmail.com”等)
  3. 如果用户身份验证为“john@abc.com”,则“托管域”声明返回为“abc.com”,我们可以识别用户和工作帐户 (yay)
  4. 但是,如果使用他们拥有的电子邮件别名(例如“john@gmail.com”)进行身份验证,则托管域返回为(空白)或“gmail.com”而不是“abc.com”。我似乎也无法访问他们的主要电子邮件地址“john@abc.com”(失败)。

关于如何发现经过身份验证的用户的“工作帐户”有什么建议吗?要请求的其他“范围”?还是其他 API?

谢谢。

【问题讨论】:

    标签: authentication oauth-2.0 google-oauth


    【解决方案1】:

    如果用户身份验证为“john@abc.com”,则“托管域”声明 返回为“abc.com”,我们可以识别用户和作品 帐户(耶)

    但是,如果使用他们拥有的电子邮件别名进行身份验证 作为“john@gmail.com”,托管域返回为(空白)或 “gmail.com”而不是“abc.com”。我似乎也无法访问他们的 主电子邮件地址“john@abc.com”(失败)。

    对于“工作帐户”,用户无法获取 gmail.com 地址作为别名。 Gmail 不支持此功能。 john@abc.com 和 john@gmail.com 是单独的帐户。因此,该功能按设计工作。不确定您从哪里获得“别名”信息,但发生的情况是我们支持多登录。用户可以同时登录多个帐户并在它们之间轻松切换。当他们第一次通过 Oauth 批准时,他们可以选择他们想要的帐户。下一次,它取决于 oauth 请求参数。

    如果您知道用户尝试登录的站点的托管域,则可以将该 hd=abc.com 传递给 google auth 请求,这样就会选择正确的帐户。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-15
      • 2016-01-17
      • 1970-01-01
      • 1970-01-01
      • 2016-09-27
      • 2018-01-07
      • 2017-09-11
      相关资源
      最近更新 更多