AWS - Как получить имя пользователя из токена в NodeJs Lamda? - PullRequest
1 голос
/ 21 мая 2019

Я использую NodeJs Lambda после шлюза API.

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;
};

Я добавляю авторизатор cognito. С токеном результат в порядке, и без результата 403. это нормально для меня.

Exemple:

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, если foobar в JWT, и возврат в toto, если toto в JWT

Теперь я хочу вернуть имя пользователя (из JWT). Мое событие пусто:

"event": {},

Ответы [ 2 ]

0 голосов
/ 24 мая 2019
 const claims = event.requestContext.authorizer.claims;
 const username = claims['cognito:username'];

перед использованием, мне нужно использовать proxyLambda

enter image description here

и добавить это для CORS (CORB):

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

или другое решение: я не использую proxyLamba, но вы настраиваете это: enter image description here

после, вам нужно декодировать JWT в Lambda.

const jwtToken = event.params.header.Authorization;
0 голосов
/ 22 мая 2019

Я не думаю, что return делает то, что вы ожидаете. Попробуйте использовать callback. Деталь здесь

Среда выполнения Node.js поддерживает необязательный параметр обратного вызова. Ты можешь использовать это явное возвращение информации обратно вызывающей стороне.

обратный вызов (ошибка, объектный результат); Оба параметра являются необязательными. ошибка - это необязательный параметр, который можно использовать для предоставления результатов сбой выполнения лямбда-функции. Когда лямбда-функция завершается успешно, Вы можете передать ноль в качестве первого параметра.

результат - необязательный параметр, который можно использовать для предоставления результата. успешного выполнения функции. Результат должен быть Совместим с JSON.stringify. Если указана ошибка, этот параметр проигнорирован.

Если вы не используете обратный вызов в своем коде, AWS Lambda вызовет его неявно и возвращаемое значение равно нулю. Когда обратный вызов вызывается, AWS Lambda продолжает вызов функции Lambda до события цикл пуст.

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