node.js - 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": {},
解决方案
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;
推荐阅读
- javascript - Uncaught (in promise) TypeError: Cannot read property 'data' of undefined React/Redux/Axios
- .net - 是否可以从项目文件而不是 DLL 中获取 SemanticModel?
- facebook - Facebook 应用在应用上线时不显示权限和功能
- ios - 如何在 iOS 中获取或编辑视频的 exif
- android - UTF-8 中的字符串转换为字节数组的大小不规律地变大?
- ionic-framework - 要执行的代码应放置在由全局脚本导出的默认函数中
- git - 如何卸载从 git-scm.com (macOS) 安装的 git?
- android - Cordova - 无法在 Android 上加载自定义图标文件
- python - 在数据框python中格式化时间差
- typescript - 将工厂创建的对象推送到数组时更正类型声明