我计划向我的网络应用程序添加一些授权逻辑。用户由 Cognito 进行管理和身份验证,API 由与 API Gateway 粘合在一起的 Lambda 函数提供支持。目前,Cognito 仅验证用户的 OAuth 令牌并允许/拒绝请求。我想通过查看用户的组来进一步限制用户在 lambda 函数中可以执行的操作。
查看 OAuth 令牌,有关组的声明位于令牌正文中。我的问题是,Cognito Authorizer 是否将
Authorization: Bearer foo
标头的值传递给 API 网关和 Lambda 处理程序?我可以做这样的事情的方式
const groups = getGroupsFromToken(event.headers.Authorization);
if (groups.includes('some group')) {
// let user do the thing
}
else {
callback({ statusCode: 401, body: 'You can\'t do the thing' });
}
它肯定会通过标头上的令牌为我发送,它也会通过
requestContext.authorizer.jwt.claims
发送,这可能对您更有用。
旧的 API 网关我总是将标头大写为“Authorization”,无论实际标头使用什么情况。较新的总是将其小写为“授权”。
我建议尝试:
const groups = getGroupsFromToken(event.headers.Authorization || event.headers.authorization);
我正在使用 lambda 代理集成(新的 APIGW UI 称为 lambda 集成 2.0),从您的回调来看,您似乎也在使用它。如果您使用旧的 lambda 集成(新 UI 中的 1.0),那么您需要一个映射模板。