当我读到当你想要授权时使用 Oauth 以及当你想要身份验证(即获取用户身份)时使用 OpenId 时,我真的很困惑。
身份在这里意味着什么?我觉得这是一种通过电子邮件等方式了解用户的方式。 我真的可以通过使用 Oauth 来获取用户的电子邮件,所以这意味着我可以识别用户以及使用更多范围来访问用户的数据,例如 Google Drive。那么为什么我在这个用例中需要 openid (只是一个问题)?
我的伪代码流程如下:
通过 oauth-client 弹出窗口,当用户授予访问权限时从前端获取授权码。 (范围为“https://www.googleapis.com/auth/userinfo.email”、https://www.googleapis.com/auth/userinfo.profile')
传递此授权码以获取访问令牌
使用访问令牌调用个人资料 API 来获取姓名和电子邮件 现在我有了身份,同样我可以使用更多范围并使用其他 api,如驱动 api
openid 适合这里或者如果我不需要 openid,哪些场景需要 openid。
提前致谢。
OAuth 主要是一种授权协议,以获取和使用访问令牌为中心。但实际上,当用户存在时,这始终包括使用代码流来触发用户身份验证,以便访问令牌以安全的方式识别用户。
OpenID Connect Core 围绕某些行为建立了更加标准化的结构,特别是客户端在身份验证之前和之后可以执行的操作:
openid
范围来请求 ID 令牌。尽管 OIDC 行为在大多数情况下很大程度上是次要的,但现在您通常一起使用 OAuth 和 OIDC。这为您的客户提供了在需要时控制登录和注销相关行为的最佳选项。例如,您可以使用 OIDC RP 发起注销或发送
prompt=login
参数来强制用户重新进行身份验证。
OIDC 还定义了标准范围,用于访问部分用户信息,例如
profile
和 email
,以及返回每个范围内包含的标准化值(声明)的 userinfo 端点。
您可能会遇到一些仅支持 OAuth 的授权服务器,但也实现了直到 2015 年 OIDC 才标准化的相同行为。如果您无法使用 OIDC 或获取 ID 令牌,并不意味着系统不太安全。