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

时间:2018-04-09 14:25:52

标签: c# aws-lambda aws-api-gateway aws-cognito serverless

我们公司刚刚开始使用AWS,我的任务是为API网关创建Lambda函数。我有c#background这是我决定使用的语言。在确定使用哪个“蓝图”时,似乎“具有测试的AWS无服务器应用程序”是正确的蓝图,因为我将创建多个功能。第一个功能是创建应用程序用户。必须在数据库用户表和Cognito中创建用户。

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

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

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

TIA, DAR

1 个答案:

答案 0 :(得分:0)

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

它在2.0增加。 Changelog

  
      
  • Amazon.Lambda.AspNetCoreServer(2.0.0)

         
        
    • 如果发现Cognito声明   传入的API网关请求创建一个ClaimsPrincipal   声称HttpContext.User。
    •   
  •   

您还可以查看source code

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

示例用法

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