Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oauth 2.0 AWS Cognito-在授权访问api网关时使用作用域_Oauth 2.0_Boto3_Amazon Cognito - Fatal编程技术网

Oauth 2.0 AWS Cognito-在授权访问api网关时使用作用域

Oauth 2.0 AWS Cognito-在授权访问api网关时使用作用域,oauth-2.0,boto3,amazon-cognito,Oauth 2.0,Boto3,Amazon Cognito,我已经设置了一个Cognito用户池,以便可以使用它来授权访问api网关。它使用OAUTH2,im使用的流程是:授权码授权, 范围:电子邮件、openid和个人资料, 允许的自定义范围:产品api/读取产品、产品api/创建产品、产品api/删除产品 我使用boto3 admin\u initiate\u auth命令连接到用户池:- response = idpclient.admin_initiate_auth( UserPoolId=USERPOOLID, AuthFlow='ADMIN_

我已经设置了一个Cognito用户池,以便可以使用它来授权访问api网关。它使用OAUTH2,im使用的流程是:授权码授权, 范围:电子邮件、openid和个人资料, 允许的自定义范围:产品api/读取产品、产品api/创建产品、产品api/删除产品

我使用boto3 admin\u initiate\u auth命令连接到用户池:-

response = idpclient.admin_initiate_auth(
UserPoolId=USERPOOLID,
AuthFlow='ADMIN_NO_SRP_AUTH',
AuthParameters={
'USERNAME':USERNAME,
'PASSWORD':PASSWORD,
'SECRET_HASH':SECRET_HASH
},
ClientId=APPCLIENTID
)
我收到的响应是一个json对象,有几个字段,包括访问令牌、刷新令牌等

但是当我使用access_令牌访问api网关时,我得到了一个401错误。未经授权。查看access_令牌,似乎还没有添加自定义作用域

您能告诉我为什么自定义作用域没有添加到access_令牌中,以及如何添加自定义作用域吗


api网关添加了lambda授权程序。

通常您必须在两个位置指定作用域:

  • AWS控制台Cognito部分中客户端应用程序的OAuth客户端条目

  • 请求令牌的代码-我总是以基于标准的方式实现这一点,而您使用的是AWS特定的解决方案

看起来您想要的可能不受admin_initiate_oauth支持:

如果您的客户端应用程序是web UI,那么基于标准的解决方案将满足您的需要

我已经用自定义范围测试了我的Cognito单页应用程序示例-您可以在这里运行它:


虽然不确定这种类型的解决方案是否适用于您..

这是一个愚蠢的问题,但您试图在API网关上访问的资源是否在您的自定义范围内?谢谢您的回答!是的,我查过了。谢谢你的提醒,谢谢你的回复!关于管理、启动和授权。。。我怀疑这可能是真的。虽然这听起来很奇怪,但我没有想到我需要在代码中添加自定义作用域。我要看一看boto3的文档,看看是否可以添加范围。如果没有,我可能不得不以某种方式使用python请求对象与cognito连接,并以这种方式获取访问\u令牌。。。再次感谢你的帮助