什么是不透明令牌?

52

“专有格式”是什么意思?我正在阅读有关JWT刷新令牌的内容,它们是不透明的令牌,但我不理解这个术语。

2个回答

78

JWT指的是可读内容的令牌,例如您可以在https://jwt.io/上看到。 任何人都可以解码令牌并阅读其中的信息。其格式已记录在RFC 7519中。

另一方面,不透明令牌具有不适合您阅读的格式,只有发行者知道该格式。

单词的含义已经给出了提示:

opaque /ə(ʊ)ˈpeɪk/ 形容词

无法透视的;不透明的。

以下是来自https://auth0.com/docs/tokens的引用:

不透明令牌:以专有格式的令牌,通常包含指向服务器持久存储中信息的标识符。要验证不透明令牌,令牌的接收方需要调用发行该令牌的服务器。

根据上述定义,“不透明JWT刷新令牌”是一个矛盾之处。实际上,某些JWT框架中仅认证令牌是JWT,而作为刷新令牌,它们使用不透明令牌。


谢谢。我觉得让我困惑的是签名部分,它是加密的,因此本质上不可读。我在这里也找到了一个很好的解释:https://community.apigee.com/questions/21139/jwt-vs-oauth.html - sloneorzeszki
2
@sloneorzeszki 在您提供的解释中,"opaque token"被描述为仅作为指向服务器端存储信息的随机字符串。这种类型的令牌在此处被描述为"reference token",而"opaque token"可能确实包含加密信息(只有原始发行者才能读取)。因此,我们应该注意到略有不同的定义。 - jps
不知道 Opaque Token 长什么样子,有例子吗? - Dendi Handian

7

"Opaque"在这里指代的是字符串(作为令牌),类似于OOP中的引用,或C语言中的指针,或关系型数据库中的外键。也就是说,需要外部内容才能解析它。

简单与复合:

该字符串是一个“简单”字符串,不像JWS那样“复合”;它内部没有部分。

内部与外部:

您可以从字符串“外部”提取负载(带有声明等),而无需引用外部服务器或存储。

由于不透明令牌是一个简单的字符串,它只是一个引用,因此,自然地,其格式完全由发行它的服务器任意确定(因此称为“专有格式”)。令牌字符串是在创建基础(所指)内容时确定的,即当它与此令牌(作为引用或外键)引用的内容配对(关联)时。


那么,一个不透明的令牌可以是一个随机字符串或一个ID整数,对吗?换句话说,它是如何生成/创建的?这个ID可能会引用授权服务器数据库中的另一个数据。例如,一个access_token和/或id_token,对吗?通常,知道一个refresh_token可以消除这两个tokens的安全性。相关链接:https://auth0.com/docs/tokens/refresh-tokens/use-refresh-tokens - Artfaith
看起来,我在这个页面上找到了答案:https://thehftguy.com/2019/01/02/the-difference-between-id_token-and-access_token-in-openid-connect/ 换句话说,access_tokenid_token可以是任何东西,但现在,两者通常都是JWT - Artfaith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接