H O*_*H O 6 oauth oauth-2.0 amazon-cognito aws-api-gateway aws-cognito
我正在配置具有各种前端(移动和Web应用程序)和单个API后端的应用程序,由Lambda提供支持并通过AWS API Gateway访问.
由于我计划使用Cognito对用户进行身份验证和授权,因此我在API网关上设置了Cognito用户池授权程序和几种API方法.
使用这样的架构,我的应用程序(例如iOS或Vue.js应用程序)从OAuth角度来看是客户端应用程序,而我的API网关后端是资源服务器.基于此Auth0论坛帖子,我似乎应该在我的客户端应用程序中使用ID令牌,并传递访问令牌以授权我的API网关资源.
当我打的Cognito /oauth2/authorize终点获得接入码,然后使用该代码打/oauth2/token终点,我得到3个令牌-一个访问令牌,一个ID令牌和刷新令牌.到目前为止一切顺利,因为我应该拥有我需要的东西.
这是我碰到的困难-使用API网关Cognito用户池授权者控制台上的测试功能,我可以在ID令牌粘贴,并将其传递(屏幕令牌解码).但是当我粘贴Access Token时,我得到了401 - unauthorized.
在我Cognito的设置,我已经启用了Authorization Code Grant止流,与email和openid范围(这似乎是Cognito让我得到试图保存而不至少这些打勾错误的最小值).
我是否需要添加一些特定的范围才能让API Gateway使用访问代码授权请求?如果是这样,这些配置在哪里?
或者我错过了什么?API网关是否仅允许ID令牌与Cognito用户池授权程序一起使用?
Rav*_*car 17
您可以使用具有适用于id令牌的相同授权程序的访问令牌,但是在用户池和APIG中还有一些其他设置要完成.
即使完成此额外设置,您也无法使用内置授权程序测试功能和访问令牌,只能使用ID令牌.来自AWS的典型80%解决方案!
要使用访问令牌,您需要在其下的用户池中设置资源服务器App Integration -> Resource Servers并不重要,但我假设您使用<site>.com标识符,并且您有一个调用范围api.
不要转到APIG中的方法并输入Method Request方法.假设已经使用id标记测试了授权程序,则添加<site>.com/api到该Settings -> OAuth Scopes部分.
只需添加OAuth Scope,即可确保令牌现在必须是访问令牌,并且不再接受ID令牌.
详情请见:https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-enable-cognito-user-pool.html
Mal*_*dov 11
对于那些寻找答案但不使用 OAuth 并使用无服务器框架进行部署的人:
让 APGW 接受 accessToken 的方法是修改我的 serverless.yml 文件,如下所示:
functions:
my-function:
handler: path to source file
events:
- http:
path: my-function
method: post
cors: true
authorizer:
type: COGNITO_USER_POOLS
scopes:
- YOUR SCOPE HERE <- THIS IS THE TRICK
authorizerId:
Ref: ApiGatewayAuthorizer
Run Code Online (Sandbox Code Playgroud)
可以通过读取 accessToken 的内容找到范围的值(通过将令牌粘贴到https://jwt.io/debugger中)。
| 归档时间: |
|
| 查看次数: |
4968 次 |
| 最近记录: |