首页 文章

AWS API Gateway - 使用具有Cognito用户池授权程序的访问令牌?

提问于
浏览
3

我正在配置具有各种前端(移动和Web应用程序)和单个API后端的应用程序,由Lambda提供支持并通过AWS API Gateway访问 .

由于我计划使用Cognito对用户进行身份验证和授权,因此我在API网关上设置了Cognito用户池授权程序和几种API方法 .

使用这样的架构,我的应用程序(例如iOS或Vue.js应用程序)从OAuth角度来看是客户端应用程序,而我的API网关后端是资源服务器 . 基于this Auth0 forum post,似乎很明显我应该在我的客户端应用程序中使用ID令牌,并传递访问令牌以授权我的API网关资源 .

当我点击Cognito /oauth2/authorize endpoints 获取访问代码并使用该代码命中 /oauth2/token endpoints 时,我得到3个令牌 - 一个访问令牌,一个ID令牌和一个刷新令牌 . 到目前为止一切顺利,因为我应该拥有我需要的东西 .

这是我遇到困难的地方 - 使用API网关Cognito用户池授权控制台上的测试功能,我可以粘贴ID令牌并传递(在屏幕上解码令牌) . 但是当我粘贴Access Token时,我得到 401 - unauthorized .

在我的Cognito设置中,我只启用了 Authorization Code Grant 流,带有 emailopenid 范围(这似乎是Cognito允许的最小值,因为我在尝试保存时遇到错误而至少没有勾选这些内容) .

我是否需要添加一些特定的范围才能让API Gateway使用访问代码授权请求?如果是这样,这些配置在哪里?

或者我错过了什么? API网关是否仅允许ID令牌与Cognito用户池授权程序一起使用?

2 回答

  • 7

    您可以使用具有适用于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

  • 0

    是的,API Gateway仅使用idToken进行授权 .

    在用户输入正确的凭据后,身份提供者提供访问代码,授权用户输入正确的凭据,客户端使用此访问代码只是为了从给定用户的 /oauth2/token endpoints 获取idToken和refreshToken . 所有进一步的调用只会在Authorization标头中使用idToken .

    在您检索用户令牌后,即使该访问代码也会过期 .

相关问题