我正在尝试对AWS API Gateway中的REST API进行身份验证,该API受AWS Cognito保护,可以通过命令行对API进行一些安全性测试。因此,我应该发送身份验证令牌以获取答案,但我只是不知道如何获取该令牌!
我们的Cognito用户池配置为用于授权代码授予流程和隐式授予,但不用于客户端凭据。我在研究过程中发现的所有内容都与客户端凭据有关,因此,如果有人使用实际上可以使用这些参数的命令行,那就太好了!
答案 0 :(得分:1)
如果您在AWS API Gateway中具有启用了Cognito身份验证的REST API,则需要在HTTP请求标头中传递Cognito生成的JWT令牌。要检索JWT令牌,您可以尝试从Cognito托管UI进行登录操作,也可以尝试AWS提供的InitiateAuth或AdminInitiateAuth API调用。为了进一步说明,如果选择“隐式授予流”,则只会返回一个ID令牌和一个访问令牌。但是,如果选择“授权码授予流程”,则会返回code
,可以利用Cognito的TOKEN Endpoint将其转换为JWT令牌。如下所示,给出了AWS Cognito文档中针对AdminInitiateAuth API调用(通过AWS CLI)的示例:
aws cognito-idp admin-initiate-auth --user-pool-id us-west-2_aaaaaaaaa --client-id 3n4b5urk1ft4fl3mg5e62d9ado --auth-flow ADMIN_NO_SRP_AUTH --auth-parameters USERNAME=jane@example.com,PASSWORD=password
这些API调用/托管的UI身份验证机制将在您成功登录后为您提供OIDC兼容的ID令牌和访问令牌。检索令牌后,可以在AWS API Gateway中创建REST API Authorizer时将令牌传递给已设置的令牌源。要了解有关将特定参数传递给cURL请求标头的更多信息,请查看此StackOverflow question。