具有 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 中的用户管理和基于令牌的身份验证