如何从 AWS HTTP API-Gateway 获取 401 状态码
How to get 401 status code from AWS HTTP API-Gateway
我正在使用 lambda 函数作为我的 HTTP API-Gateway 的身份验证器,我在简单响应中计算了三种情况-
- 当“isAuthenticated”= True --> 200 并且请求通过时
- 当“isAuthenticated”= False --> 403 并且它 return 禁止
- 当 header 中缺少身份验证密钥时 --> 401
我想在“isAuthenticated”= False 时 return 401 或找到从 API-Gateway/authorizer 发送 401 错误代码的方法,在 REST API-Gateway 中,这可以通过提高带有“未授权”的 error/exception。但这对于 REST API-Gateway.
是不可能的
我几乎尝试了所有方法来发送来自简单和策略 HTTP API-Gateway 的响应,例如引发 Exceptions/Error/callback 甚至 returning null。
当用户未通过身份验证时,有没有办法让我 return 401? Whosebug 上有很多类似的问题,但主要针对 REST API-Gateway,我的问题是特定于 HTTP API-Gateway。
在您的 lambda 中,您可以设置响应代码和正文,并且 return 将其设置为 HTTP API 网关。例如
exports.handler = async (event) => {
const unauthorisedResponse = {
statusCode: 401,
body: "Unauthorised"
};
return unauthorisedResponse;
};
我来晚了(在这里偶然发现了其他东西)但简而言之答案是 不,你不能。
HTTP API 专门设计得更简单,配置更少,因此 return 您想要的响应代码的自由度较低。
对于遇到此问题的任何人,此处提供了有关 lambda 授权器如何简单地用于 HTTP API(而非 REST API)的更多信息。
使用 HTTP API,使 lambda 授权方具有简单的响应格式(不是 IAM)。并且 return 以下 json 来自您的函数:
return {
"isAuthorized": false/true,
"context": {
"somethingLikeUserIdOptional": 123,
}
}
返回 isAuthorized = false
,将导致 HTTP 网关自动 return 一个 403 (Forbidden)
给调用者。省略您的授权人所需的身份源 (parameters/headers) 将 return 一个 401 Unauthorized
而不会执行您的 lambda。显然 isAuthorized = true
return 是一个 200 Success
,它使用你放在上下文中的内容为 API 路由执行下一个 lambda。
查看此处了解更多信息:Lambda Authorizers AWS Docs
有关状态代码 returned 和演练的详细信息,请参阅此处:AWS Walkthrough from AWS Blog
我正在使用 lambda 函数作为我的 HTTP API-Gateway 的身份验证器,我在简单响应中计算了三种情况-
- 当“isAuthenticated”= True --> 200 并且请求通过时
- 当“isAuthenticated”= False --> 403 并且它 return 禁止
- 当 header 中缺少身份验证密钥时 --> 401
我想在“isAuthenticated”= False 时 return 401 或找到从 API-Gateway/authorizer 发送 401 错误代码的方法,在 REST API-Gateway 中,这可以通过提高带有“未授权”的 error/exception。但这对于 REST API-Gateway.
是不可能的我几乎尝试了所有方法来发送来自简单和策略 HTTP API-Gateway 的响应,例如引发 Exceptions/Error/callback 甚至 returning null。
当用户未通过身份验证时,有没有办法让我 return 401? Whosebug 上有很多类似的问题,但主要针对 REST API-Gateway,我的问题是特定于 HTTP API-Gateway。
在您的 lambda 中,您可以设置响应代码和正文,并且 return 将其设置为 HTTP API 网关。例如
exports.handler = async (event) => {
const unauthorisedResponse = {
statusCode: 401,
body: "Unauthorised"
};
return unauthorisedResponse;
};
我来晚了(在这里偶然发现了其他东西)但简而言之答案是 不,你不能。
HTTP API 专门设计得更简单,配置更少,因此 return 您想要的响应代码的自由度较低。
对于遇到此问题的任何人,此处提供了有关 lambda 授权器如何简单地用于 HTTP API(而非 REST API)的更多信息。
使用 HTTP API,使 lambda 授权方具有简单的响应格式(不是 IAM)。并且 return 以下 json 来自您的函数:
return {
"isAuthorized": false/true,
"context": {
"somethingLikeUserIdOptional": 123,
}
}
返回 isAuthorized = false
,将导致 HTTP 网关自动 return 一个 403 (Forbidden)
给调用者。省略您的授权人所需的身份源 (parameters/headers) 将 return 一个 401 Unauthorized
而不会执行您的 lambda。显然 isAuthorized = true
return 是一个 200 Success
,它使用你放在上下文中的内容为 API 路由执行下一个 lambda。
查看此处了解更多信息:Lambda Authorizers AWS Docs
有关状态代码 returned 和演练的详细信息,请参阅此处:AWS Walkthrough from AWS Blog