小编Igo*_*ski的帖子

使用Amazon.Lambda.AspNetCoreServer自定义授权者数据

在过去与Node.js广泛合作之后,我们目前正在研究ASP.NET Core作为替代Lambda平台.

过去,我们的API网关前端服务依赖于自定义授权器,该授权器对用户进行身份验证,并从我们公司的IAM服务中检索基于资源的权限策略列表.授权者将该列表附加到authContext键.我们的服务将通过Lambda Proxy与API Gateway集成,并从原始代理请求中提取主体对象.

使用Amazon.Lambda.AspNetCoreServer在API网关和ASP.NET之间进行转换时,我们无法达到类似的方案.

Amazon.Lambda.AspNetCoreServer :: ApiGatewayProxyFunction :: FunctionHandlerAsync(Stream responseStream,ILambdaContext lambdaContext)或任何等效的Lambda处理程序签名,在第一个参数中接收完整的原始请求.可以将流序列化(例如,转换为JSON.NET JObject)并在那里提取主体对象.

但是,证明很难在ASP.NET应用程序中访问该数据.我不相信授权者响应传递给HTTP上下文.检查时,ClaimsPrincipal context.User键不包含任何数据.

几种解决方案被抛出:

  • 在重写FunctionHandlerAsync中检索IAM信息,并使用环境变量或会话全局存储它们
  • 创建IAM提供程序服务的接口和补充实现.它将公开一种检索IAM信息的方法.实施只会返回一个反序列化的索赔清单.该服务将在重写的Init(IWebHostBuilder)方法中配置.
  • 将(声明/常规)主体对象粘合在一起并尝试将其传递给HTTP上下文

有没有办法干净利落地实现这一目标?

c# amazon-web-services aws-lambda asp.net-core

5
推荐指数
1
解决办法
1485
查看次数