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

Posted

技术标签:

【中文标题】AWS Cognito:将自定义声明/属性添加到 JWT 访问令牌【英文标题】:AWS Cognito: Add custom claim/attribute to JWT access token 【发布时间】:2019-11-20 01:39:13 【问题描述】:

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

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

【问题讨论】:

forums.aws.amazon.com/thread.jspa?threadID=249160 看看这个 您可以设置应用客户端可以读取哪些属性。如果您将其设置为可读,它将被添加到 JWT。 @giaco 我需要 JWT 访问令牌中的自定义属性,而不是 JWT ID 令牌中的自定义属性。 抱歉误读问题。请问为什么需要在访问令牌中使用这些数据? 搞清楚了吗? 【参考方案1】:

自定义属性在 Cognito 访问令牌中不可用。目前也无法使用Pre Token Generation Lambda Trigger 在访问令牌中注入额外的声明。 PreToken Generation Lambda Trigger 只允许您自定义身份令牌(Id Token)声明。

【讨论】:

这似乎有一个例外:如果您覆盖 cognito:groups 声明,它将在访问令牌和 ID 令牌中覆盖它 - 请参阅 docs.aws.amazon.com/cognito/latest/developerguide/…【参考方案2】:

您可以使用 ID 令牌来获取具有自定义属性的令牌。

访问令牌并非旨在携带有关用户的信息。它们只是允许访问某些已定义的服务器资源。

您可以在客户端的不同组件周围传递 ID Token,这些组件可以使用 ID Token 来确认用户已通过身份验证并检索有关他们的信息。

如何使用 amazon cognito 身份 js 检索 Id 令牌

cognitoUser.authenticateUser(authenticationDetails,
  onSuccess: function(result) 
    var accessToken = result.getIdToken().getJwtToken();
    console.log('accessToken is: ' + accessToken);
  ,
  onFailure: function(err) 
    alert(err.message || JSON.stringify(err));
  ,
);

【讨论】:

【参考方案3】:

当我想创建多个微服务时,我遇到了同样的问题。我无法自定义访问令牌,而只能自定义身份令牌。但是,我在需要访问令牌的机器对机器中使用客户端凭据。所以,我绝对不能自定义我的令牌。最后,我决定在事件标题中添加此类信息(如用户类型)。与自定义令牌相比,这不是一种非常安全的方法,但目前没有其他简单的方法可以做到这一点。否则,我必须在 Cognito 中重写授权人。就像重写一个自定义的授权者一样,非常痛苦。

【讨论】:

以上是关于AWS Cognito:将自定义声明/属性添加到 JWT 访问令牌的主要内容,如果未能解决你的问题,请参考以下文章

使用 Windows 身份验证时向身份添加自定义声明

如何将 AD FS 组成员身份映射到自定义 AWS Cognito 属性?

AD B2C - 重新获取令牌后缺少自定义声明

如何根据用户输入在 Jwt Token 上添加自定义声明?

Firebase onCreate 向 auth.user 添加自定义声明

在身份验证过滤器中添加自定义声明。在过滤器中获取用户 ID。弹簧靴