Oauth 也可以给出用户身份吗?

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

当我读到当你想要授权时使用 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-2.0 oauth openid-connect openid
1个回答
0
投票

OAuth 主要是一种授权协议,以获取和使用访问令牌为中心。但实际上,当用户存在时,这始终包括使用代码流来触发用户身份验证,以便访问令牌以安全的方式识别用户。

OpenID Connect Core 围绕某些行为建立了更加标准化的结构,特别是客户端在身份验证之前和之后可以执行的操作:

  • 客户端包含
    openid
    范围来请求 ID 令牌。
  • 客户端可以发送额外的请求参数来控制用户身份验证的工作方式。
  • 客户端可以读取 ID 令牌以了解用户身份验证的方式和时间并获取用户标识符。

尽管 OIDC 行为在大多数情况下很大程度上是次要的,但现在您通常一起使用 OAuth 和 OIDC。这为您的客户提供了在需要时控制登录和注销相关行为的最佳选项。例如,您可以使用 OIDC RP 发起注销或发送

prompt=login
参数来强制用户重新进行身份验证。

OIDC 还定义了标准范围,用于访问部分用户信息,例如

profile
email
,以及返回每个范围内包含的标准化值(声明)的 userinfo 端点。

您可能会遇到一些仅支持 OAuth 的授权服务器,但也实现了直到 2015 年 OIDC 才标准化的相同行为。如果您无法使用 OIDC 或获取 ID 令牌,并不意味着系统不太安全。

© www.soinside.com 2019 - 2024. All rights reserved.