AWS 和 C# 无服务器应用程序 - 无法找到访问 ID 令牌的上下文

AWS and C# Serverless Application - can't find context to access ID token

我们公司刚刚开始使用 AWS,我的任务是为 API 网关创建 Lambda 函数。我有 c# 背景,所以这是我决定使用的语言。在确定要使用哪个 "blueprint" 时,似乎 "AWS Serverless Application with Tests" 是正确的蓝图,因为我要制作多个函数。第一个功能是创建一个应用程序用户。必须在数据库用户 table 和 Cognito 中创建用户。

根据我搜索的有关我的问题的帮助,大多数应用程序似乎是以允许用户自行注册的方式编写的。我们的情况并非如此。管理员必须创建用户。我们正在使用 Cognito 对管理员和应用程序用户进行身份验证,因此无论类型如何,每个用户都必须在数据库用户 table 和 Cognito 中创建。

我遇到的问题是,当用户登录并通过 Cognito 进行身份验证并导致 Lambda 函数执行时,我需要访问 ID 令牌以获取用户的 Cognito 凭据,以便我可以在用户 table。当我搜索如何执行此操作时,我找到的几乎所有帮助都涉及在 Function.cs 文件中找到的上下文对象。但是无服务器应用程序没有 function.cs 文件。无服务器应用程序具有以下文件: - LambdaEntryPoint.cs - Startup.cs - NameOfYourChoiceController.cs

None 个文件 (类) 可以访问上下文对象。上周,我接触了一位在 AWS 方面经验丰富但在 .NET 方面没有经验的顾问。我们永远无法确定如何访问 ID 令牌。我希望这里有人可以提供帮助。

TIA, 达尔

HttpContext.User 是您要获取 Cognito 信息的内容

在 2.0 添加。 Changelog

  • Amazon.Lambda.AspNetCoreServer (2.0.0)

    • If Cognito claims are found on an incoming API Gateway request create a ClaimsPrincipal with the claims for the HttpContext.User.

你也看看source code

我也花了一段时间才弄明白 ;)

用法示例

[HttpGet]
public void SomeMethod()
{
    var x = HttpContext.User;
    var y = x?.Claims;
    LambdaLogger.Log(y);
}