【发布时间】:2018-12-13 11:34:55
【问题描述】:
我想创建一个使用 AWS Cognito 进行身份验证的 AWS 无服务器应用程序。我的出发点是 Visual Studio 2017 中 C# 的 AWS Serverless Application with Tests (.NET Core) 模板。部署时,模板会创建一些 Lambda 函数并设置 AWS API Gateway,以便我可以通过 REST 请求连接到 Lambda 函数。这行得通。
我在 AWS Cognito 中创建了一个用户池,以及一个允许用户使用 AWS Cognito 登录的 javascript 客户端(单页应用程序)。在 javascript 客户端中,我能够连接到 AWS Cognito 并以 JWT 的身份获取 ID、访问和刷新令牌。我还可以在 Authorization: Bearer eyblablabla... 标头中将这些令牌发送到后端(AWS 无服务器应用程序)。因此,javascript 客户端身份验证和 AWS Cognito 设置似乎可以工作。我还在 AWS API Gateway 中设置了一个指向 AWS Cognito 用户池的授权方。
我的问题如下:后端似乎不知道授权标头。在检查请求时,我没有收到用户的任何索赔。我对获得sub 声明特别感兴趣,以便我可以识别用户。另外,我希望 API 网关为特定方法自动发送 Unauthorized 响应,但我不知道如何设置。
作为 Lambda 函数签名的一部分,我得到一个 APIGatewayProxyRequest 请求对象。显然request.RequestContext.Authorizer.Claims 应该包含用户声明,但.Authorizer 为空。
我能够获取我从 javascript 客户端发送的任何 JWT 并读取请求标头,因此我可以解析令牌以获取用户声明。但我认为我的设置一定有问题,因为 .Authorizer 没有被填充。
到目前为止,我发现的唯一建议涉及 serverless.yml 或 Swagger 模板文件中的内容,它们都不是 AWS Serverless Application VS2017 模板的一部分。相反,我有一个 serverless.template JSON 文件,并且没有明显的方法可以向该文件添加身份验证/安全设置。
到目前为止,我的代码与 VS2017 中的 AWS 无服务器应用程序模板相同。
任何帮助将不胜感激。
【问题讨论】:
标签: c# aws-lambda jwt aws-api-gateway aws-cognito