【发布时间】: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