Dan*_*ell 3 oauth-2.0 jwt openid-connect
据我了解,JWT 访问令牌不应包含个人身份信息 (PII)。这是为了保持它们很小,但如果被拦截,也可以减少所包含信息的暴露。
OIDC 协议要求实现用户信息端点。可以使用访问令牌调用它,它将返回一堆有关用户的声明。实际上 id 令牌包含什么,但可能包含更多信息。
因此,即使访问令牌本身不携带此 PII,但如果被拦截,它肯定可以用来暴露所有这些信息。因此,关于访问令牌中的 PII 的争论并不真正成立。
这是否意味着我应该可以在访问令牌中包含电子邮件,因为除了子声明之外,API 可能还需要它?
这里有几点需要说明:
并非所有访问令牌都必须允许访问 userinfo 端点。首先,您的系统必须公开用户信息端点。其次,用户必须同意将 userinfo 端点中的信息发布给给定的客户端。因此,在某些访问令牌的情况下,不会有恶意方可以访问 userinfo 端点的威胁。有时用户可以同意只公开他们的用户名,因此即使您获得了用户信息的访问权限,您仍然无法阅读电子邮件。(当然这取决于OIDC Provider的实现)
在大多数情况下,oauth 访问令牌用作不记名令牌。这意味着拥有令牌的任何人都可以访问可以使用该令牌访问的任何数据。如果有人设法窃取该令牌,他们就可以做原始客户端可以做的任何事情。如果您担心,您可以使用发送者约束令牌而不是承载令牌(例如mTLS 约束令牌或实施DPoP)。这些令牌与最初请求它们的客户端相关联。攻击者不仅必须窃取访问令牌,还必须窃取用于验证所有权证明的证书。其实现比不记名令牌稍微复杂一些,但安全性大大提高。
我会避免将任何 PII 放入 JWT 中。JWT 可以像这样解码,并且任何人都可以读取其中保存的任何信息。假设有人设法获得了从您的系统发出的 JWT,但它已过期。他们将无法访问 API 或用户信息,但仍然可以从 JWT 中提取数据。最好使用不透明令牌作为访问令牌并在网关中交换它们(称为幻影令牌方法)。
有趣的是,我最近才就这个具体主题进行了一次演讲 - 使用 JWT 作为访问令牌和 Phantom Token 流程:)(如果您感兴趣,可以在此处查看 :)链接)
归档时间: |
|
查看次数: |
1795 次 |
最近记录: |