如何使用OAuth 2.0 / OpenID Connect处理后续的SSO登录?

问题描述 投票:0回答:1

[我试图弄清楚我的服务器如何检查用户以前是否已经通过某个第三方身份提供商(例如:Facebook)通过SSO身份验证登录。

JWT documentation,有两个主张对我很重要:

  • [iss-“ iss”(发布者)声明标识了发布JWT
  • sub-“ sub”(主题)声明标识的主体是JWT的主题。

如果现有用户随后再次通过Facebook登录,我可以保证这两个声明是相同的吗?换句话说,我可以将这两个值存储在数据库中,当用户再次通过Facebook登录时,我可以查询这些值并确认他/他已经存在吗?

作为比较,我知道SAML使用的联合身份验证ID对于每个用户始终是一致的。 OpenID Connect是否有类似的东西?

oauth-2.0 jwt single-sign-on saml openid-connect
1个回答
0
投票

将OAuth用户ID存储在数据库中是一种非常标准的技术,尽管并非所有提供程序都基于标准:

  • 子声明的设置方式因供应商而异,但通常总是有一个不变的声明来唯一地标识用户-生成的数字或GUID-在Facebook中,我认为它被称为user_id

用于识别用户的另一种方法是在验证令牌后将令牌发送到用户信息端点,以获取电子邮件,然后将其与电子邮件上的应用程序数据进行匹配。当用户已经存在并且您正在更改他们的登录方式时,这很有用。

某些提供商可能会为每个应用程序发布不同的用户ID,尽管这种情况并不常见-值得测试。

就支持多个发行人而言,您有2个主要选择:

  • 在运行时从令牌中获取发行者,并对每个发行者进行不同的验证-同样,某些供应商可能没有按照标准设置iss声明
  • [与this question中一样,使用联合登录-这样您的应用程序仅能与一个提供程序对话,并且代码更简单]]
© www.soinside.com 2019 - 2024. All rights reserved.