当前位置: 首页 > 知识库问答 >
问题:

AWS API网关授权程序认知用户池不工作{"消息":"未授权"}

楚修为
2023-03-14

我正在尝试将AWSAPI网关授权器与cognito用户池一起使用。当我使用AWSAPI网关控制台进行测试时,它运行良好。

但当我尝试在api中启用授权时,它会显示“消息”:“未经授权”。请查看下面的屏幕截图

有人能帮忙吗?

仅供参考,我已经按照这里提到的说明http://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html

共有3个答案

缑修齐
2023-03-14

我尝试了马蒂亚斯的解决方案,一开始不起作用。奇怪的是,我可以在几个小时后再次尝试,这次在部署应用编程接口之前对我的应用编程接口网关进行了一些其他更改。这一次成功了,尽管我所做的其他改变是肤浅的。

而且,通常情况下,AWS文档是错误的,说明您应该使用method.response.header.授权。这实际上只对使用自定义身份验证的Lambdas有效。当您使用新的Cognito用户池授权程序时,您确实应该在这里使用授权程序。

  1. 使用授权而不是method.response.header.授权
  2. 对API网关中的资源进行肤浅的更改
  3. 部署您的API并等待一秒钟

--编辑--

我刚刚将堆栈转换为Cloudformation,发现如果使用Cloudformation部署授权程序,实际上需要为令牌源指定完整的方法.response.header.Authorization。事实上,如果不使用该格式,堆栈部署将失败。但是,一旦部署,如果您查看控制台中的授权者,它将删除方法.response.header部分。

丁淇
2023-03-14

下面的步骤为我解决了这个问题。简而言之,AWSAPI网关中似乎存在一个bug。您可以通过重新部署API来修复此问题:

  1. 将请求验证程序从无更改为验证正文
晏弘雅
2023-03-14

在我的情况下,授权代码应该是id\u token。我错误地使用了access\u令牌

 类似资料:
  • 我正在尝试使用aws api网关授权器和cognito用户池。当我使用aws api网关控制台进行测试时,它工作得很好。 但当我尝试在api中启用授权时,它显示请查看下面的屏幕截图 有人能帮忙吗。

  • 我试图让我的API网关与Cognito用户池授权器一起工作,但我似乎无法让它工作。我现在没有使用任何SDK。一些细节-对于Cognito pool,我将设置ID provider设置为Cognito user pool,Oauth flow'impilicit grant‘和scope设置为'openid'。创建了一个应用程序(&domain),还生成了客户端机密。电子邮件是唯一的字段。-在API

  • 我创建了一些Lambda函数,并使用SAM进行了部署。部署是成功的,但当试图到达endpoint时,我总是获得 即使我使用头发送正确的承载令牌。然后,如果我去Authorizer并运行测试,它会很好地通过并在CloudWatch中生成日志,但是当我从前端应用程序或REST客户端应用程序运行到endpoint的请求时,我会得到未经授权的消息,并且检查CloudWatch,就不会执行Authorize

  • 一个简单的APIendpoint,带有一个Cognito用户池授权器,当使用授权器测试按钮(或使用邮差/失眠)和一个有效令牌失败时(截图bellow): 我知道该令牌是有效的,因为我可以使用相同的令牌成功调用Cognito用户池endpoint,并返回所需的响应。此外,删除授权程序(将其设置为),也将返回所需的响应。我试过带或不带,我还试过将令牌源更改为,这是我在一些旧问题中发现的,但保存后立即又

  • 目前,我正在开发无服务器架构,其中AWSAPI网关中有一组资源和方法。我计划将Cognito身份验证(用户池)和授权作为安全层添加到AWS API网关。 AWS API Gateway中有3个授权者,分别是IAM、Cognito用户池和custom lambda。 在我的用例中,登录和注册(身份验证)通过API网关使用Cognoto用户池。这是完美的作品。我的用户将获得应用程序客户端id和客户端密