我在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": {},
答案 0 :(得分:0)
我认为return
并没有达到您的期望。尝试使用callback
。详细信息here
Node.js运行时支持可选的回调参数。您可以使用 它可以明确地将信息返回给调用者。
回调(错误错误,对象结果);这两个参数都是可选的。 error是一个可选参数,可用于提供以下结果 Lambda函数执行失败。 Lambda函数成功执行后, 您可以将null作为第一个参数。
result是一个可选参数,可用于提供结果 函数成功执行的时间。提供的结果必须是 JSON.stringify兼容。如果提供错误,则此参数为 忽略。
如果您未在代码中使用回调,则AWS Lambda将调用它 隐式地,返回值为null。当回调被调用时, 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);
};
答案 1 :(得分:0)
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;