openID 用例
Posted
技术标签:
【中文标题】openID 用例【英文标题】:Use case of openID 【发布时间】:2022-01-14 23:41:55 【问题描述】:我对 openID 的用例有点困惑。
比如说,如果用户使用 openID 登录到 Web 应用程序。此 Web 应用程序是否应该为用户创建一个帐户?
1)。如果应该,那么使用openID和使用OAuth(将范围设置为“配置文件”)获取用户信息然后为用户创建帐户有什么区别。 (稍后登录可以使用 profile/id 令牌中的唯一键在数据库中查找用户)
2)。如果不应该,那么如果用户注销,然后再次使用 openID 登录,则用户之前所做的所有活动(例如,保存一些文章以供以后阅读)已经消失(假设没有设置 cookie/会话,因为他们仅限于一台设备)。如果是这样,在这种情况下,身份验证的意义何在
我了解 openID 是 OAuth 的扩展,专为身份验证而设计,但我应该何时以及如何使用 openID 进行身份验证?
谢谢
【问题讨论】:
【参考方案1】:OpenID 确实是一个 OAuth 扩展,但它可能会令人困惑,
OAuth2.0:授权
OpenID Connect:身份验证
如果您自己完成所有身份验证,请使用 OpenID Connect,如果您只需要授权,则可以使用 OAuth2.0(如果您已经有类似 SAML 2.0 的身份验证方式)。
OpenID Connect 添加认证标准的 JWT 令牌(ID 令牌)。请记住,它们都是标准,因此您应该阅读相应的文档来遵循它。
您可以单独使用 OAuth2.0 进行身份验证,但它不应该是这样的,您可能会超出标准。
类似问题见:What's the difference between OpenID and OAuth?
【讨论】:
【参考方案2】:正如 EmCode 指出的 OAuth 用于授权,OpenID Connect 用于身份验证。这意味着使用 OAuth 流,最终您会获得一个访问令牌,让您可以访问用户的资源(或以该用户的身份执行操作)。使用 OIDC 流程时,您会获得一个 ID 令牌,它会告诉您用户是谁。当然,您可以混合使用两者并通过 OIDC 流程获得 ID 令牌和访问令牌。
例如:
您有一个使用 Google 作为 OIDC 登录流程的 IdP 的应用。当用户单击登录按钮时,他们会在 Google 确认身份,并且您的应用会返回一个 ID 令牌。此令牌不允许让您的应用访问由 Google 控制的任何用户资源(邮件、日历、照片等)。它只是根据您对范围的要求为您提供用户是谁的信息 - 可能是他们的姓名、电子邮件地址、年龄等。
如果您使用 OAuth 流程并要求用户允许您的应用访问他们的日历,那么您会从 Google 获得访问令牌。使用此令牌,您可以调用 Google 日历 API 来获取用户的活动等。
一旦您获得来自 IdP 的 ID 令牌,您通常会在您的应用中创建一个帐户并将其与您从 IdP 获得的身份相关联。这允许您保存有关您的用户的任何相关状态/业务数据。 OIDC 为您提供的是,用户在登录您的网站时无需输入任何密码 - 他们可以使用 Google 登录,您的应用仍然会知道用户是谁。
【讨论】:
以上是关于openID 用例的主要内容,如果未能解决你的问题,请参考以下文章