我们可以在 aws 中请求 jwt id 令牌时添加自定义数据吗
Posted
技术标签:
【中文标题】我们可以在 aws 中请求 jwt id 令牌时添加自定义数据吗【英文标题】:can we add custom data while requesting jwt id token in aws 【发布时间】:2021-11-28 11:23:08 【问题描述】:exports.signIn = (body) =>
return new Promise((resolve, reject) =>
var authenticationData =
Username: body['username'],
Password: body['password'],
;
var authenticationDetails = new AmazonCognitoIdentity.AuthenticationDetails(authenticationData);
var userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);
var userData =
Username: body['username'],
Pool: userPool,
;
var cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData);
cognitoUser.authenticateUser(authenticationDetails,
onSuccess: (result) =>
resolve(
"status": 1, "message": "user signed in successfully ", "data":
"idToken": result.getIdToken().getJwtToken(),
"accessToken": result.getAccessToken().getJwtToken(),
"refreshToken": result.getRefreshToken().getToken()
);
,
onFailure: (error) =>
let message = "User sign in failed " + error
let status = 0
if(error.code == 'NotAuthorizedException')
message = "Incorrect username or password"
else if(error.code == 'UserNotConfirmedException')
message = "User confirmation pending with OTP"
status = 2
reject( "status": status, "message": message );
,
);
)
我需要在 id 令牌中添加自定义数据。数据是动态的,因此我无法将其添加为 cogito 用户详细信息中的自定义字段。确切的要求是:就在创建 id 令牌之前,我需要从数据库中获取数据并将其包含在 JWT id 令牌中。
【问题讨论】:
【参考方案1】:如果你想要一个 cognito jwt 令牌,目前是不可能的。
为了向 JWT id 令牌添加数据,您需要对令牌进行解码,添加数据,并对更新的数据进行编码。但是,为了对更新的数据进行编码,您需要 AWS cognito 使用的私钥,据我所知,目前无法获取或使用您自己的私钥。
另一种方法是在对更新的数据进行编码时使用您自己的私钥。但是,令牌将不再是 Cognito JWT,并且可能会导致应用的其他部分出现问题。
因此,我的建议是单独传递数据,而不是将其包含在 JWT 令牌中。如果您可以在未来的请求中包含 JWT 令牌,您还可以包含参数或正文。如果是敏感数据,可以用典型算法进行编码
参考资料:
where can I find the secret key for the JWT from cognito【讨论】:
以上是关于我们可以在 aws 中请求 jwt id 令牌时添加自定义数据吗的主要内容,如果未能解决你的问题,请参考以下文章
如何保存 jwt 令牌以在下一个请求中使用?在nodejs中
AWS Cognito:将自定义声明/属性添加到 JWT 访问令牌
ASP.NET Core 2.1 API JWT 令牌 Session.id 在每次请求时都会更改