首页 > 解决方案 > AWS - 如何从 NodeJs Lamda 中的令牌中获取用户名?

问题描述

我在 API 网关之后使用 NodeJs Lambda。

var AWS = require('aws-sdk');
const cognito = new AWS.CognitoIdentityServiceProvider({apiVersion: '2016-04-18'})
exports.handler = async (event) => {
  const token = ...;
  const username = ...;
  const response = {
    "username": "...",
    firstname: "...",
    name: "...",
    email: "...",
    groups: []
  };
  return response;
};

我添加了一个认知授权者。使用令牌,结果是好的,结果是 403。对我来说可以吗?

例子:

https://123456789.execute-api.eu-west-1.amazonaws.com/v1/user/me

返回:

{
    "username": "foobar",
    "firstname": "foo",
    "name": "bar",
    "email": "foobar@gmail.com",
    "roles": [
        "Admin"
    ]
}

* 如果 foobar 在 JWT 中,则使用 foobar;如果 toto 在 JWT 中,则返回 toto

现在,我想返回用户的用户名(来自 JWT)。我的活动是空的:

"event": {},

标签: node.jsaws-lambdaamazon-cognito

解决方案


 const claims = event.requestContext.authorizer.claims;
 const username = claims['cognito:username'];

在使用它之前,我需要使用 proxyLambda

在此处输入图像描述

并为CORS(CORB)添加:

   const response = {
     statusCode: 200,
     headers: {
       "Access-Control-Allow-Origin": "*"
     },
     body: JSON.stringify(r)
  };
  return response;

或其他解决方案:我不使用 proxyLamba,但您配置此: 在此处输入图像描述

之后,您需要在 Lambda 中解码 JWT。

const jwtToken = event.params.header.Authorization;

推荐阅读