node.js - Cognito - 检查 idToken 的有效性

标签 node.js amazon-cognito

我在 Node.js 中有一个后端 API,可从查询参数中检索 Amazon Cognito ID token 。我需要检查此 token 是否有效。有什么方法可以使用 aws-sdkamazon-cognito-identity-js SDK 来检查吗?

最佳答案

我为此苦苦挣扎了几天,我刚刚找到了如何做到这一点,这是一个可以为您进行验证的完整功能,您需要提供的只是与您之前创建的认知池相关的 userPoolId 和 pool_region然后您可以通过将 token 作为参数发送到任何您想要的地方调用此函数,如果 token 是否有效,您将在控制台上获得结果,这是实现它的方法:

  1. 创建一个名为 tokenValidation.js 的文件(例如)
  2. 将此代码粘贴到其中:

// Cognito data
   
const userPoolId = "###########"; // Cognito user pool id here    
const pool_region = '#########'; // Region where your cognito user pool is created

const jwt = require('jsonwebtoken');
const jwkToPem = require('jwk-to-pem');
const request = require('request');


// Token verification function
const  ValidateToken = (token) => {
    console.log('Validating the token...')
    request({
        url: `https://cognito-idp.${pool_region}.amazonaws.com/${userPoolId}/.well-known/jwks.json`,
        json: true
    }, (error, response, body) => {
        console.log('validation token..')
        if (!error && response.statusCode === 200) {
            pems = {};
            var keys = body['keys'];
            for(var i = 0; i < keys.length; i++) {
                //Convert each key to PEM
                var key_id = keys[i].kid;
                var modulus = keys[i].n;
                var exponent = keys[i].e;
                var key_type = keys[i].kty;
                var jwk = { kty: key_type, n: modulus, e: exponent};
                var pem = jwkToPem(jwk);
                pems[key_id] = pem;
            }
            //validate the token
            var decodedJwt = jwt.decode(token, {complete: true});
            if (!decodedJwt) {
                console.log("Not a valid JWT token");
                return;
            }

            var kid = decodedJwt.header.kid;
            var pem = pems[kid];
            if (!pem) {
                console.log('Invalid token');
                return;
            }

            jwt.verify(token, pem, function(err, payload) {
                if(err) {
                    console.log("Invalid Token.");
                } else {
                    console.log("Valid Token.");
                    console.log(payload);
                }
            });
        } else {
            console.log(error)
            console.log("Error! Unable to download JWKs");
        }
    });
}

// Exporting it to call it anywere you want
exports.ValidateToken = ValidateToken

  1. 在您需要时像这样导入它:const validateToken = require('./tokenValidation')

  2. 最后这样调用它:validateToken.ValidateToken(result.getAccessToken().getJwtToken())

我知道这是一个老问题,但我真的希望这对以后的其他人有所帮助。

关于node.js - Cognito - 检查 idToken 的有效性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54495039/

相关文章:

node.js - 使用变量获取 JSON 值时出现未定义

javascript - 云函数: HTTP trigger inconsistent batch commit

Node.js - 当此代码运行时,Heroku 服务器崩溃

ios - AWS AppSync 订阅 iOS 的特定设备/用户?

Swift AWS Cognito 错误 : Authentication delegate not set

java - 将文件上传到 s3 时出现 AWS Cognito 异常

javascript - NodeJS JSON.stringify() 瓶颈

javascript - Sequelize - self 引用有很多关系

javascript - 预注册 Lambda 触发器 autoConfirmUser 不起作用

amazon-web-services - 带有 USER_PASSWORD_AUTH 的 AWS Cognito 自定义身份验证流程