具有 Cognito 身份验证的 AWS API Gateway Lambda 函数返回 415 Unsupported Media Type

Posted

技术标签:

【中文标题】具有 Cognito 身份验证的 AWS API Gateway Lambda 函数返回 415 Unsupported Media Type【英文标题】:AWS API Gateway Lambda Function with Cognito authentication returns 415 Unsupported Media Type 【发布时间】:2018-09-30 07:51:58 【问题描述】:

更新:我刚刚在 CloudWatch 日志中注意到,内容类型以某种方式从 application/json 变为 text/plain。这是 WebHost 字符串现在的样子:

[信息] Microsoft.AspNetCore.Hosting.Internal.WebHost:请求开始 POST https://snip.execute-api.us-west-2.amazonaws.com/Stage/api/Clinician text/plain

这是调用工作时的样子:

[信息] Microsoft.AspNetCore.Hosting.Internal.WebHost:请求开始 POST https://snip.execute-api.us-west-2.amazonaws.com/Stage/api/Clinician application/json 然而,Postman 中的标头设置了 Content-Type: application/json

那么为什么内容类型会发生变化?

原帖开头:

我正在使用 Visual Studio 2017“带测试的无服务器应用程序”蓝图开发 API Gateway Lambda 函数,这是一个 .NET CORE 解决方案。我们正在使用 Cognito 用户池进行身份验证。我正在使用 Postman 来测试我的第一个功能。我正在为 Cognito 用户池中的用户传递有效的 ID 令牌。请求通过了身份验证,但以 415 Unsupported Media Type 响应。

在开始传递 ID 令牌之前,我使用的是 AWS_IAM 授权方。届时,body (content-type: application/json) 会成功映射到 POST 参数。但是现在我正在使用 Cognito 用户池授权方,在调用 POST 时我得到了 415 Unsupported Media Type。 POST 方法签名是:

    [HttpPost]
    public APIGatewayProxyResponse Post([FromBody]Clinician user)

我在正文中发送的示例数据是:


"Id": "",
"Username": "6punk",
"Title": "Punker",
"FirstName": "Six",
"MIddleName": "",
"LastName": "Punk",
"Suffix": "",
"PreferredFirstName": "",
"PreferredLastName": "",
"Email": "bogus@email.com",
"Phone": "+18015551206",
"UserSub": "",
"ClinicianTypeId": "1",
"EhrId": ""

如前所述,当以 IAM 用户身份进行身份验证或通过 API Gateway 控制台中的方法测试窗格进行测试时,JSON 完美地映射到临床医生类。

我启用了 CORS。 对于 ANY 方法,我将集成请求类型设置为 LAMBDA_PROXY。

在使用来自 Cognito 用户的 ID 令牌测试 Postman 的 POST 方法时,有什么想法会导致 415 Unsupported Media Type?

【问题讨论】:

您能否显示 Postman 在您发送请求时生成的 cURL 代码? 【参考方案1】:

事实证明,这是 Postman 中的一个错误。即使我将 Content-type 指定为 application/json,它也将内容类型作为 text/plain 传递。我删除了 Content-Type 标头,然后重新创建它并开始工作。我已经让 Postman 起来好几天了。我不确定为什么它开始传递文本/纯文本。我所知道的是,当我将 Content-Type 标头删除并重新创建为 application/json 时,事情才重新开始工作。

【讨论】:

以上是关于具有 Cognito 身份验证的 AWS API Gateway Lambda 函数返回 415 Unsupported Media Type的主要内容,如果未能解决你的问题,请参考以下文章

AWS - JavaScript - 具有经过身份验证的 Cognito 用户对 DynamoDB 的 CRUD 操作

AWS API Gateway 身份验证(Cognito 与自定义授权者)

AWS Cognito 和 AWS API Gateway 中的用户管理和基于令牌的身份验证

具有 Cognito 联合身份的 AWS AppSync IAM 授权

使用 AWS Cognito 进行多租户身份验证

Firebase 身份验证与 AWS Cognito [关闭]