過去,我們在Node.js上進行了廣泛的工作,目前我們正在研究將ASP.NET Core作爲替代Lambda平臺。使用Amazon.Lambda.AspNetCoreServer自定義授權者數據
過去,我們的API網關前端服務依賴於一個自定義授權者,該授權者對用戶進行了身份驗證,並從我們公司的IAM服務中檢索了基於資源的權限策略列表。授權人將該列表附加到authContext密鑰中。我們的服務將通過Lambda Proxy與API Gateway集成,並從原始代理請求中提取主體對象。
當使用Amazon.Lambda.AspNetCoreServer在API網關和ASP.NET之間進行轉換時,我們無法得出類似的情況。
Amazon.Lambda.AspNetCoreServer :: ApiGatewayProxyFunction :: FunctionHandlerAsync(流responseStream,ILambdaContext lambdaContext),或與此有關的任何等效LAMBDA處理程序簽名,接收第一參數的完整,原始請求。 這是可能的序列化流(例如,到JSON.NET JObject)並提取主體對象。
但是,證明困難的是訪問ASP.NET應用程序內的數據。我不相信授權人響應被傳遞給HTTP上下文。檢查它時,ClaimsPrincipal context.User鍵不包含任何數據。
幾種解決方案是圍繞拋出:
- 檢索在被覆蓋的FunctionHandlerAsync IAM信息和全球存儲它們的使用環境變量或會話
- 創建接口和互補實現的IAM提供服務。它會公開一個檢索IAM信息的方法。實施會簡單地返回反序列化的索賠列表。該服務將在重寫Init(IWebHostBuilder)方法中進行配置。
- 粘合在一起(索賠/一般)主要對象,並試圖將它傳遞給HTTP上下文
有沒有乾淨地實現這一目標?