Cognito User PoolのJWTトークンを検証する
Cognito User Poolへログインした際に返却されるAccessTokenやIdTokenを検証する方法。
API Gatewayの認証でCognitoを使いたいけど、いろいろ処理を入れたいときなどに。
const request = require('request-promise-native') const jwt = require('jsonwebtoken') const generatePEM = require('rsa-pem-from-mod-exp') const verifyToken = async token => { const { header, payload } = jwt.decode(token, { complete: true }) if (!payload) { throw new Error('invalid token') } if (payload.iss !== YOUR_COGNITO_IDP_ISSUER) { throw new Error('invalid token') } const jwks = await request({ method: 'GET', uri: `${payload.iss}/.well-known/jwks.json`, transform: body => JSON.parse(body) }) const { n, e } = jwks.keys.find(c => (c.kid === header.kid)) const pem = generatePEM(n, e) return new Promise((resolve, reject) => { jwt.verify(token, pem, (error, decoded) => { if (error) { reject(error) return } resolve(decoded) }) }) }
流れとしては、
必要であれば、token_use
の確認を。