语境
我正在重写一个 ASP.NET Core 应用程序,从在 lambda 上运行到在 ECS 容器上运行。Lambda 开箱即用地支持从 Cognito Authorizer 注入的声明,但 Kestrel 不支持。
API 请求通过 API 网关进入,其中 Cognito 用户池授权方正在验证 OAuth2 令牌并丰富从令牌到 httpContext 的声明。
最初,该应用程序在入口点继承的 lambda 上运行Amazon.Lambda.AspNetCoreServer.APIGatewayProxyFunction
,它提取这些声明并将它们添加到Request.HttpContext.User.Claims
.
Kestrel 当然不支持这一点, AWS ASPNET Cognito 身份提供者似乎是为了执行授权人正在做的相同事情。
解决方案?
所以我想到也许我可以添加一些自定义代码来提取它。注入 lambda 的 HTTP 请求看起来像这样,所以我希望它在代理到 ECS 时应该是一样的
{
"resource": "/{proxy+}",
"path": "/api/authtest",
"httpMethod": "GET",
"headers": {
<...>
},
"queryStringParameters": null,
"pathParameters": {
"proxy": "api/authtest"
},
"requestContext": {
"resourceId": "8gffya",
"authorizer": {
"cognito:groups": "Admin",
"phone_number_verified": "true",
"cognito:username": "normj",
"aud": "3mushfc8sgm8uoacvif5vhkt49",
"event_id": "75760f58-f984-11e7-8d4a-2389efc50d68",
"token_use": "id",
"auth_time": "1515973296",
"you_are_special": "true"
}
<...>
}
是否有可能,我该如何将所有键/值对从requestContext.authorizer
to添加Request.HttpContext.User.Claims
?