授权 header 是由 Cognito Authorizer 传递给 lambda 函数的吗?

is the Authorization header passed to lambda function by Cognito Authorizer?

我打算向我的网络应用程序添加一些授权逻辑。用户由 Cognito 管理和验证,API 由与 API 网关粘合在一起的 Lambda 函数提供支持。

目前,Cognito 仅验证用户的 OAuth 令牌和 allows/denies 请求。

我想通过查看用户组进一步限制用户在我的 lambda 函数中可以执行的操作。

查看 OAuth 令牌,关于组的声明在令牌 body 中。我的问题是,Cognito 授权方是否将 Authorization: Bearer foo header 的值传递给 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' });
}

对我来说,它肯定是通过 header 上的令牌发送的,它也通过 requestContext.authorizer.jwt.claims 发送的,这可能对你更有用。

较旧的 api 网关我总是将 header 大写为“授权”,而不管实际 header 使用何种大小写。较新的总是将其小写为“授权”。

我建议尝试:

const groups = getGroupsFromToken(event.headers.Authorization || event.headers.authorization);

我正在使用 lambda 代理集成(新的 APIGW UI 正在调用 lambda 集成 2.0),从您的回调看来您也在使用它。如果您使用的是旧的 lambda 集成(新 UI 中的 1.0),那么您需要一个映射模板。