也需要 ID 令牌才能访问 API 端点

Requiring the ID token too to access an API endpoint

让我们举一个例子,我们有一个 SPA 使用 OIDC 隐式流访问 API。

由于 OAuth 范围是 coarse-grained,因此通常需要在资源服务器上执行额外的授权。例如,当通过端点访问动态资源(例如文件系统)时可能就是这种情况 - 其中访问受到与 userId 相关的权限的限制,但仅由于资源的动态性质而使用 OAuth 范围是不切实际的。

在这些情况下,端点本身可以​​受到 OAuth 范围的保护,同时将根据 userId 授予对端点操作的资源(例如文件)的访问权限。因此,必须在 API 请求中安全地发送用户身份。

一个明显的选择可以是发送身份验证时获得的 ID 令牌,以及同时获得的访问令牌。

有一种在 HTTP 请求中发送访问令牌的标准方法(授权 header),但是有没有一种用于 ID 令牌的方法?或者我应该编一个 header 名字,比如 'X-Identity'?

回答问题:在 HTTP 请求中传递 ID 令牌没有标准。

但可以说不需要一个:在这种情况下,您可能不需要 OpenID Connect,因为 scopes 并不是唯一可以与 OAuth 2.0 访问令牌相关联的信息,就像您看起来那样建议。

您可以"associate" userId 与访问令牌,以便资源服务器可以根据向客户端授予访问令牌的用户的身份授予客户端对受保护资源的访问权限。

"association" 依赖于实现:访问令牌可以是包含 userId 声明的 JWT,或者访问令牌可以是资源服务器可以在授权服务器上 introspect/validate 的不透明值获取与之相关的信息。

您可以将其作为查询参数传递,而不是在 header 中传递:

curl "https://resourcePath?auth=<ID_TOKEN>

参考资料如下: https://firebase.google.com/docs/database/rest/auth#authenticate_with_an_access_token