开放 ID 令牌与 Oauth 令牌

Open ID Token vs Oauth Token

我是OAuth和OpenId的新手,看了很多页面和资料还是一点信心都没有。

我的目标是创建一个 iOS 与我的 BE 通信的应用程序。我需要 iOS 应用程序来验证用户以访问其资源。

阅读有关 OAuth 的文章,解决方案似乎很简单。只需使用 Authorization Code Flow with PKCE 即可使 App 具有 Access Token。这样我就授权我的 iOS 应用程序访问用户数据。当 iOS 应用程序使用访问令牌调用 https://example.org/user 时,资源服务(我的 BE 服务器)可以获取访问令牌并调用内省 API 以了解访问令牌是给哪个用户的绑定到并 return 正确的用户数据。由于授权首先需要进行身份验证,因此拥有访问令牌意味着用户已(或至少已)通过身份验证。

首先让我感到困惑的是:根据 OAuth 规范,OAuth 不是身份验证协议,但该协议仍然使用用户的凭据对用户进行身份验证。 为什么 OAuth 要求用户提供凭据,而不是依赖另一个 protocol/flow 来进行用户身份验证? 这样的协议只会向 OAuth 确认身份验证成功。

第一期让我开始阅读有关 Open ID Connect 规范和 ID 令牌的内容。此令牌将由 iOS 应用程序接收。 iOS 应用程序应该用它做什么? 我已经可以获取调用 /user 端点的用户信息。 这个 ID Token 有什么优势?

tldr

  • 访问令牌 (OAuth 2.0) - 针对受保护的 OAuth 进行授权 端点。

  • ID 令牌 (OIDC) - 由客户端应用程序进行身份验证。

  • 授权服务器身份验证 - 用于检测 涉及两种协议的最终用户的真实性(伪 从客户端应用程序角度进行身份验证)


OAuth 不是身份验证协议,但该协议仍然包含使用用户凭据对用户进行身份验证的步骤

正确,OAuth 不是身份验证协议。它用于授权,这意味着确定存在访问受保护资源的正确访问权限(受保护资源?例如:- API,存储在后端的照片)。

那么为什么您会看到最终用户登录对话框?这就是 授权服务器 的工作。它对最终用户进行身份验证,然后将访问令牌颁发给客户端(简单来说,客户端 == 最终用户使用的应用程序)。所以是的,发生了身份验证,但这不适用于您的客户端应用程序或受保护的端点。可以将其定义为伪身份验证。

OpenID Connect - 用于客户端应用程序的身份验证

在原始 RFC (RFC-6749) 中,OAuth 2.0 被定义为一个框架。 OpenID Connect 是基于此框架构建的扩展。它提供什么?正如您所发现的,它引入了 ID 令牌。 ID 令牌由授权服务器颁发,供您的客户端应用程序使用。它包含 JWT 格式的最终​​用户身份信息。通过验证此令牌的完整性,您的客户端应用程序可以验证最终用户。和访问令牌?那是用来对付受保护端点的。它没有向客户说明有关最终用户的任何信息。