首页 > 解决方案 > OAuth 客户端是否需要验证令牌作为授权代码授予的一部分?

问题描述

使用授权代码(有或没有 PKCE)代表用户获取访问 + id 令牌的应用程序是否还需要验证这些令牌(签名、未过期、受众等)?

如果有,是为了什么?由于客户端使用 TLS 并指向其配置的提供程序,该客户端还验证令牌缓解了哪些攻击/威胁?

标签: oauth-2.0openid-connect

解决方案


乍一看你是对的,规范基本上允许不检查通过 TLS 直接从令牌端点返回的令牌,正如你所建议的那样,但是:

首先,有人可能会争辩说,如果存在签名,那么它的存在是有原因的,并且应该对其进行验证,因为如果提供者不想要/不需要签名,它也可以自由返回没有签名的令牌 (alg="none")客户端进行验证。

其次,有一些已知的攻击(“IDP 混淆”)会诱使客户端与错误的令牌端点通信,以此窃取授权码:验证返回的 ID 令牌与预期的签名不匹配至少会阻止客户端处理攻击者生成的 ID 令牌。

第三,一般而言,客户端保护自己免受损坏或受损的 IDP 是有益的,避免重放攻击或类似攻击。

我想当您在一个域中完成所有这些操作时,即客户端、AS 和 RS 都在同一个组织的控制之下,并且它们之间的关系是固定的并且只是一对一的,技术上的验证将是基于过度杀伤力的关于当前知识和已知攻击。

但是,如果您的用例跨越多个安全域,通常验证比假设要好。


推荐阅读