使用OpenID连接多个提供商来识别用户

时间:2018-03-25 07:44:44

标签: spring-security-oauth2 openid-connect

我正在编写一个带有spring boot的Web应用程序,并希望用户能够告诉我他的身份提供者是什么。就像我在Stackoverflow上一样。

如何以独特的方式识别用户?我已经读过我应该使用sub / Subject来区分用户。使用多个提供商时这是唯一的吗?

我担心用户会提供恶意身份提供程序,然后告诉我的应用程序他是另一个用户。

2 个答案:

答案 0 :(得分:2)

  

如何以独特的方式识别用户?我已经读过我应该使用sub / Subject来区分用户。使用多个提供商时这是唯一的吗?

您将(isssub)的组合存储为全局唯一的标识符。正如Kavindu已经提到的那样,sub声明本身只是locally unique

  

我担心用户会提供恶意身份提供程序,然后告诉我的应用程序他是另一个用户。

有两种方法可以通过以下方式在您的应用中使用“多个提供商”:

  1. 一组受信任的IdP
  2. 任何IdP
  3. 如果某人的真实身份对您很重要,那么您可以选择您信任的提供商来提供某人的身份详细信息。然后,人们只能通过列表中的某个提供商登录。

    但是如果它没那么重要(正常的用户名/密码注册也不提供任何保证),那么您也可以选择让人们使用他们选择的提供商登录。然后可以通过OIDC Discovery从用户的“句柄”中发现正确的提供者。

答案 1 :(得分:1)

问:如何以独特的方式识别用户?使用多个提供商时这是唯一的吗?

根据OpenID Conenct规范,“sub”声明在本地是唯一的。以下是从规范中提取,突出显示(reference),

  

主题标识符。 最终用户的本地唯一从未重新分配标识

因此,当您与单个身份提供商打交道时,“sub”声明是唯一的。但这并不适用于多个提供商。

问:我担心用户会提供恶意身份提供商,然后告诉我的应用他是另一个用户。

我怀疑这种情况。您的应用程序是否允许最终用户根据需要注册不同的身份提供者?

在OpenID Connect中,有一个应用程序注册步骤。您的应用需要客户端标识符。注册过程还涉及重定向URL注册。所有这些都是在注册步骤中完成的。如果没有这些,OpenID Connect将无法运行。

除此之外,不同的提供商的行为也不同。例如,虽然“sub”是传达最终用户身份的标准声明,但提供商可以使用自定义声明来定义特定用户身份。这是OpenID Connect规范允许的。因此,您的应用程序必须仅支持您在应用程序设计时知道的已知的,完善的身份提供程序。