amazon-web-services - 为什么 Amazon Cognito 不在其访问令牌中返回受众字段?
问题描述
当 Amazon Cognito 颁发访问令牌时,它不包含aud
字段。
在Cognito tokens 的文档中,为 id 令牌列出了该aud
字段(始终设置为与 相同的值client_id
),但没有为访问令牌列出。
JWT 规范的相关部分说:
如果当该声明存在时,处理该声明的主体未使用“aud”声明中的值来标识自己,则必须拒绝 JWT。
那么,这里发生了什么。谁是对的?这是一个安全问题吗?
我注意到iss
令牌的部分特定于我的用户池,并且不能被篡改,因为它是由亚马逊签名的,所以我认为我应该是安全的
OAuth 2 和 JWT 非常令人困惑,所以我想获得更多意见。
解决方案
根据我对 RFC 的阅读,我不认为 AWS 做错了什么,特别是(注意我的重点):
如果处理该声明的主体在此声明存在时未将其自身标识为“aud”声明中的值,则必须拒绝 JWT。
使用此声明是可选的。
我相信,这意味着 AWS 很好,因为它只是在访问令牌的情况下省略了声明,但它通过将其设置为何时对 id 提出声明来识别自己(以它自己的方式)client_id
令牌。
应该注意的是,访问令牌本身确实对受众进行了编码和强制执行;因为当您针对 AWS 的 API 使用它时,它将强制您仅接收为其发布的 client_id/scope 上可用的资源。
推荐阅读
- mongodb - 使用 $pull 和 Deployd 方法
- angular - Groupby 可观察的
- configuration - Nuxt 为应用程序设置 src URL 而不影响路由
- c# - Unity:实时视频流 ARCore 相机纹理
- reactjs - ReactJs Select标签不反映更新状态
- elasticsearch - Redisearch 中的多边形查询
- php - 在哪里检查 Laravel 语言翻译是否存在?
- javascript - 如何使用 HTML 范围或数字输入来控制 CSS 属性?
- git - 为 API 的版本调用存储 git 标签的最佳实践
- google-sheets - 将数据从一列拆分为多列和多行