【发布时间】: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 帐户属于哪个“工作帐户”,以便我可以将其映射到我平台上的正确组织。
一个例子会帮助我思考:
- 我们的客户叫“ABC Ltd”
- 他们有一个 Google Work 帐户,每个人的主要电子邮件地址(域)都是“...@abc.com”。用户还有电子邮件别名(“...@anotherdomain.com”、“...@gmail.com”等)
- 如果用户身份验证为“john@abc.com”,则“托管域”声明返回为“abc.com”,我们可以识别用户和工作帐户 (yay)
- 但是,如果使用他们拥有的电子邮件别名(例如“john@gmail.com”)进行身份验证,则托管域返回为(空白)或“gmail.com”而不是“abc.com”。我似乎也无法访问他们的主要电子邮件地址“john@abc.com”(失败)。
关于如何发现经过身份验证的用户的“工作帐户”有什么建议吗?要请求的其他“范围”?还是其他 API?
谢谢。
【问题讨论】:
标签: authentication oauth-2.0 google-oauth