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 访问令牌的主要内容,如果未能解决你的问题,请参考以下文章
如何将 AD FS 组成员身份映射到自定义 AWS Cognito 属性?