首页 > 解决方案 > 为什么 Amazon Cognito 不在其访问令牌中返回受众字段?

问题描述

当 Amazon Cognito 颁发访问令牌时,它不包含aud字段。

Cognito tokens 的文档中,为 id 令牌列出了该aud字段(始终设置为与 相同的值client_id),但没有为访问令牌列出。

JWT 规范的相关部分说:

如果当该声明存在时,处理该声明的主体未使用“aud”声明中的值来标识自己,则必须拒绝 JWT。

那么,这里发生了什么。谁是对的?这是一个安全问题吗?

我注意到iss令牌的部分特定于我的用户池,并且不能被篡改,因为它是由亚马逊签名的,所以我认为我应该是安全的

OAuth 2 和 JWT 非常令人困惑,所以我想获得更多意见。

标签: amazon-web-servicesoauth-2.0jwtamazon-cognito

解决方案


根据我对 RFC 的阅读,我不认为 AWS 做错了什么,特别是(注意我的重点):

如果处理该声明的主体在此声明存在时未将其自身标识为“aud”声明中的值,则必须拒绝 JWT。

使用此声明是可选的。

我相信,这意味着 AWS 很好,因为它只是在访问令牌的情况下省略了声明,但它通过将其设置为何时对 id 提出声明识别自己(以它自己的方式)client_id令牌。

应该注意的是,访问令牌本身确实对受众进行了编码和强制执行;因为当您针对 AWS 的 API 使用它时,它将强制您仅接收为其发布的 client_id/scope 上可用的资源。


推荐阅读