我们可以在 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 令牌时添加自定义数据吗的主要内容,如果未能解决你的问题,请参考以下文章

使用AWS Android SDK发送JWT令牌

如何保存 jwt 令牌以在下一个请求中使用?在nodejs中

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

ASP.NET Core 2.1 API JWT 令牌 Session.id 在每次请求时都会更改

ReactJS-在http请求的axios方法中将JWT令牌作为授权传递

如何使用 Aws AppSync 将 JWT 令牌(或任何其他变量)从父解析器传递给子解析器