JWT访问令牌是否应该包含PII? [英] Should JWT access tokens contain PII?

查看:22
本文介绍了JWT访问令牌是否应该包含PII?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

根据我的理解,JWT访问令牌不应该包含个人身份信息(PII)。这是为了使它们保持较小,但如果被截获,也会减少所包含信息的暴露。

OIDC协议要求实现一个用户信息端点。可以使用访问令牌来调用它,它将返回一系列关于用户的声明。有效地包含id标记的内容,但可能包含更多信息。

因此,即使访问令牌本身不携带此PII,但如果被拦截,它肯定可以用来公开所有这些信息。因此,关于访问令牌中的PII的争论实际上站不住脚。

这是否意味着我应该可以在访问令牌中包括电子邮件,因为API可能需要它作为子声明之外的内容?

推荐答案

这里有几点需要说明:

  1. 并非所有访问令牌都必须允许访问UserInfo终结点。首先,您的系统必须公开一个UserInfo终结点。其次,用户必须同意将UserInfo端点中的信息发布给给定的客户端。因此,在某些访问令牌的情况下,不会有恶意方可能访问UserInfo端点的威胁。有时用户可以同意只公开他们的用户名,所以即使你获得了用户信息的访问权,你仍然无法阅读电子邮件。(当然这取决于OIDC提供程序的实现)

  2. 在大多数情况下,OAuth访问令牌用作承载令牌。这意味着拥有令牌的任何人都可以访问可以使用该令牌访问的任何数据。如果有人设法窃取了令牌,他们可以做原始客户可以做的任何事情。如果您担心这一点,您可以使用发送者约束令牌来代替持有者令牌(例如mTLS constrained tokens或实现DPoP)。这些令牌被绑定到最初请求它们的客户端。攻击者不仅必须窃取访问令牌,还必须窃取用于验证拥有证明的证书。与使用不记名令牌相比,实现略显棘手,但安全性大大提高。

  3. 我会避免在JWT中放置任何PII。JWT可以像这样被解码,其中的任何信息都可以被任何人读取。据说有人设法获得了从你的系统发出的JWT,但它已经过期了。他们将无法访问API或用户信息,但他们仍然可以从JWT提取数据。最好使用不透明令牌作为访问令牌,并在您的网关(称为a Phantom Token approach)中交换它们。

有趣的是,我最近才就这个具体主题做了一次演讲--使用JWTs作为访问令牌和Phantom令牌流:)(如果您感兴趣,可以在此处查看:)link)

这篇关于JWT访问令牌是否应该包含PII?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆