【问题标题】:How to access secured backend API using API Gateway?如何使用 API Gateway 访问安全的后端 API?
【发布时间】:2017-11-28 12:05:16
【问题描述】:

我创建了一个后端 spring-boot REST api,它部署在通过 JWT 进行身份验证的 EC2 上。所以,我首先 curl 获取 Bearer 令牌:

curl -iH "Content-Type: application/json" -X POST -d '{"username":"myusername", "password":"mypassword"}' http://123.45.6782.910:8080/login

然后进行 REST 调用以访问我的 REST 资源

curl -H "Authorization: eyJhbGzd9.NYHXPv-vXUIoNr7qtA" http://123.45.6782.910:8080/categories/pets/

这一切都很好。

现在,我想使用 API Gateway 访问 /categories/pets/ 资源。

我已经设置了 GET - 方法执行的方法请求,集成请求部分。但是,当我尝试测试设置时,我得到 403。

{
  "timestamp": 1498392625274,
  "status": 403,
  "error": "Forbidden",
  "message": "Access Denied",
  "path": "/categories/pets/"
}

我认为这是意料之中的,因为我直接尝试在没有承载令牌的情况下访问后端 api。我想知道如何在 http://123.45.6782.910:8080/login 上进行 POST 以获取 Bearer 令牌,然后调用 /categories/pets/

更新:根据@KaHouIeong 的建议,我在 API 网关上创建了一个 POST 端点 /login 来获取承载令牌,当我在 API 网关的测试控制台中进行测试时,我得到了 Authorization →Bearer eyJhbGzd9 但是当我从邮递员那里尝试,我得到状态 200 OK 但不是 Authorization →Bearer eyJhbGzd9 令牌。

content-length →0
content-type →application/json
status →200
via →1.1 swfbfbbaf3fb6c32bdccb152354539e473d.cloudfront.net (CloudFront)
x-amz-cf-id →K9V3XUxHOretrza0kCM5dk_G5eZgePrtrBziyVTxptrePD7wjsWqk-l0kCQQ==
x-amzn-requestid →5ac81024-5c27-11e7-af9a-9f3c8494c542
x-amzn-trace-id →Root=1-5953e77f-ed76d15b5bfre9374c9

【问题讨论】:

  • 如果你使用授权不记名令牌,标头似乎不正确,试试这个:-H "Authorization: Bearer eyJhbGzd9.NYHXPv-vXUIoNr7qtA"
  • 不,这不是问题。您不一定需要不记名关键字。没有它,它对我有用。
  • 有服务器日志可以看一下吗?
  • 您的客户端应该向/login 发送请求并从响应中获取承载令牌,然后重新使用该令牌访问您的/categories/pets/ API。工作流程应该与您直接访问 EC2 后端相同。对于 API Gateway 上的 API 设置,您需要设置 /login 资源并指向 http://123.45.6782.910:8080/login
  • 您需要设置集成响应标头映射以将Authorization 映射回方法响应,然后API Gateway 将通过标头传递给客户端。

标签: amazon-web-services jwt aws-api-gateway


【解决方案1】:

您的客户端应向/login 发送请求并从响应中获取不记名令牌,然后重新使用该令牌访问您的/categories/pets/ API。 工作流程应该与您直接访问 EC2 后端相同。

对于您在 API Gateway 上的 API 设置,您需要设置一个 /login 资源并指向 http://123.45.6782.910:8080/login

然后,您需要设置集成响应标头映射,将Authorization 标头映射回方法响应,然后 API Gateway 将通过标头传递给客户端。

integration.response.header.Authorization -> method.response.header.Authorization

【讨论】:

    猜你喜欢
    • 2021-08-29
    • 2020-10-01
    • 2018-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    • 2018-01-10
    相关资源
    最近更新 更多