AWS Cognito:向 JWT 访问令牌添加自定义声明/属性

Hir*_*ana 23 amazon-cognito aws-lambda

我的应用程序为每个新注册用户创建一个自定义属性“userType”。现在,每当用户登录或刷新令牌时,我都希望将此“userType”声明/属性添加到 JWT 访问令牌中。

是否可以选择告诉 cognito 将我的自定义声明/属性添加到 JWT 访问令牌?(没有预代币生成 Lambda)

sta*_*kOp 12

自定义属性在 Cognito 访问令牌中不可用。目前,也无法使用预令牌生成 Lambda 触发器在访问令牌中注入其他声明。PreToken Generation Lambda Trigger 仅允许您自定义身份令牌(Id Token)声明。

  • 这似乎有一个例外:如果您覆盖 `cognito:groups` 声明,它将在访问令牌和 ID 令牌中覆盖它 - 请参阅 https://docs.aws.amazon.com/cognito/最新/developerguide/user-pool-lambda-pre-token- Generation.html (8认同)

emi*_*iaz 9

建议在后端系统中使用 ID 令牌进行授权的响应是不良的安全实践。ID 令牌用于确定用户确实已登录以及该用户的身份。这是应该在您的前端执行的事情。另一方面,访问令牌用于确定(到您的后端的)请求是否已获得授权。ID 令牌没有与访问令牌相同的针对欺骗的安全控制(请参阅 Auth0 的此博客:https: //auth0.com/blog/id-token-access-token-what-is-the-difference/)。

相反,我建议您的后端通过AuthorizationHTTP 标头接受访问令牌作为承载令牌。然后,您的后端调用颁发访问令牌的授权服务器上的相应/userinfo端点(请参阅: https: //openid.net/specs/openid-connect-core-1_0.html#UserInfo),将此类访问令牌传递给该端点。此端点将返回所有 ID 令牌信息和声明,然后您可以使用它们在代码中做出授权决策。


Oli*_*ver 8

更新,23 年 12 月 18 日

AWS 现在可以使用预令牌生成 lambda 通过自定义声明来丰富访问令牌。

这并不能完全回答OP的问题(因为它使用预令牌生成),但是它可能与登陆这里的其他人相关。

发布通知:

https://aws.amazon.com/about-aws/whats-new/2023/12/amazon-cognito-user-pools-customize-access-tokens/

文件:

https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-pre-token- Generation.html#user-pool-lambda-pre-token- Generation-accesstoken

正如评论中所述,目前此功能的可用性存在限制。目前,只能在用户流上添加自定义声明以访问令牌,而不能在客户端凭据流上添加自定义声明。该功能将于 2024 年第二季度推出。信息感谢 BradP

  • 这不适用于客户端凭据流程。一周前我与 AWS Cognito 团队讨论了这个问题。他们表示,修改访问令牌仅适用于用户流,而不适用于客户端凭据流。他们表示,将于 2024 年第二季度修改客户端凭据流程中的访问令牌。 (2认同)