【问题标题】:Change response "not a valid key=value pair (missing equal-sign) in Authorization header" in AWS ApiGateway在 AWS ApiGateway 中更改响应“授权标头中不是有效的键 = 值对(缺少等号)”
【发布时间】:2021-01-16 03:54:31
【问题描述】:

我读过其他类似的帖子,错误信息完全相同,但我的问题不同。

我在 https://XXXXXXXX.execute-api.us-east-1.amazonaws.com/xxxx/users 中有一个 AWS ApiGateway(从现在起我将其称为 /users)。

我已经使用 Cognito 授权实现了我的 ApiGateway 到 Lambda 脚本,它们可以正常工作,例如:

  • /users/me -> 返回当前登录用户的数据

问题是当我在 ApiGateway 中调用一个不存在的路由时,例如:

  • /users/mine123 -> 它返回

{ "消息": “'my-cognito-user-id-token' 不是 授权标头中的有效键=值对(缺少等号): '承载者我的认知用户 ID 令牌'。” }

我的问题是...... 当 ApiGateway 中的路由不存在时,有没有办法返回 NotFound 或 BadRequest 错误?

我认为有可能实现资源 ANY,但是,有没有一种“干净”的方法可以在没有资源 ANY 的情况下实现它?


编辑 1:

我也尝试了 Api Gateway 响应。我为 Resource Not Found 设置了一个自定义响应,状态错误代码 404 但 Api Gateway 仍然返回 403 Forbidden

编辑 2

我也已经配置了 4XX 响应:

并且 API Gateway 总是返回 403 错误以及此消息(正如一般 4XX 错误所预期的那样),但是我认为这没有意义,因为它不是真正的 Forbidden 错误它是 NotFoundBadRequest错误。

例如,

他们都没有返回403 Forbidden

【问题讨论】:

    标签: amazon-web-services


    【解决方案1】:

    当“资源路径不存在”时抛出错误消息status 403,响应标头为“x-amzn-ErrorType”=“IncompleteSignatureException”

    带有“Authorization”标头的请求被发送到 API 资源 不存在的路径。

    我们可以在“网关响应”部分自定义响应正文。对于这种情况,似乎没有特定的网关响应,如未经授权、无效签名等,因此我们需要配置Default 4XX

    我们可以更新status codeResponse Templates。与成功请求过程中的集成响应不同,错误网关响应模板doesn't support full VTL 模板但仅支持简单的占位符。

    application/json 的示例配置

    {"message":"Invalid Resource","type": "$context.error.responseType","stage": "$context.stage"}
    

    会回来

    {
        "message": "Invalid Resource",
        "type": "DEFAULT_4XX",
        "stage": "qa"
    }
    

    【讨论】:

    • 我试过了,Resource not found设置为404错误,但是Api Gateway还是返回403 Forbidden。
    • @Vlady 你试过Default 4XX吗? Resource not found 用于认证成功后缺少资源,例如:缺少 lambda 函数
    • 添加了我测试过的配置截图。
    • 是的,我做到了,但这很令人困惑,例如,如果我向有效资源发送无效令牌,它会返回 UNAUTHORIZED,但如果我向无效资源发送有效或无效令牌,它总是会返回FORBIDDEN.
    • 不幸的是,无效签名没有特定的网关错误(我将联系 AWS),但我继续配置了另外两个错误,我得到了 Access Denied(拒绝策略)和 Unauthorized (Authorizer Errors) ,则不会默认为 4XX。
    【解决方案2】:

    不确定这是否比您的建议更干净,但是您可以为缺少的身份验证令牌配置特定的网关响应 - https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-gateway-response-using-the-console.html

    在“网关响应”窗格中,选择一种响应类型。在本演练中,我们以 Missing Authentication Token (403) 为例。

    您可以更改 API Gateway 生成的状态代码以返回满足您 API 要求的不同状态代码。在此示例中,自定义将状态代码从默认 (403) 更改为 404,因为当客户端调用可被视为未找到的不受支持或无效资源时会出现此错误消息。

    【讨论】:

    • 我试过了,Resource not found设置为404错误,但是Api Gateway还是返回403 Forbidden。
    猜你喜欢
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    • 2019-12-01
    • 1970-01-01
    • 2016-03-08
    • 2018-12-31
    • 2012-10-27
    相关资源
    最近更新 更多