【问题标题】:Using AWS Cognito access token in requests for API gateway in Python在 Python 中的 API 网关请求中使用 AWS Cognito 访问令牌
【发布时间】:2019-01-15 07:51:08
【问题描述】:

我已经能够为我的 Aws Cognito 用户获取访问令牌(使用 this)。 但我无法弄清楚如何为带有 Cognito 授权方的 Api 网关生成经过身份验证的 request。 有人可以分享一个示例 sn-p 吗?

【问题讨论】:

  • 正如 bwinant 所回答的,在请求的 Authentication 标头中添加您的访问令牌就足够了。根据您的问题,我假设您已将 Cognito 用户池配置为生成访问令牌。这是正确的吗?我不明白您是否已经配置了 API Gateway,或者它是否是问题的一部分。
  • 我已经配置好了。我得到令牌。但试图在标题中发送它对我不起作用。因此我希望有一些示例代码如何将它放在标题中。也许我做错了..

标签: python python-requests amazon-cognito


【解决方案1】:

发出 API 网关请求时,将从 Cognito 用户池中获取的访问或 id 令牌放入 Authentication 标头中

【讨论】:

    【解决方案2】:

    问题应该出在 API 网关和 Cognito 用户池配置中。您可以在标头请求中使用 id 令牌而不是访问令牌,如果 API 网关和 Cognito 用户池具有基本配置,它应该可以工作。

    如果您更喜欢使用访问令牌,您必须检查 API 网关和 Cognito 用户池的配置中的一些细节:应该有一个 Cognito 中的资源服务器和 同时API网关的Method Request中定义了OAuth Scopes,与Resource server一致。 您可以在此问题中找到有关此配置的很好解释: AWS API Gateway - using Access Token with Cognito User Pool authorizer?

    我建议你最后一种方式并使用访问令牌。

    关于请求头,放上'Authorization': YOUR_ACCESS_TOKEN就够了。 当您在 API Gateway 中创建 Authorizer 时,检查是否在 Token Source 中添加了“Authorizarion”。

    【讨论】:

      【解决方案3】:

      我的回答假设您拥有 Cognito Authorizer,而不是 Lambda Authorizer。创建 Cognito Authorizer 时,请在 Token Source 字段中提供授权令牌的名称。例如,auth_token

      要调用授权者所绑定的API资源,需要当前登录用户的IdToken

      借助 lambda 函数,您可以通过获取IdTokenAccessTokenRefreshToken 来组织用户登录。 IdToken 和 AccessToken 寿命不长。您可以创建一个 lambda 函数,将 RefreshToken 发送到用户池并取回新的 IdToken 作为响应。阅读更多关于所有这些东西的信息here

      因此,您有一个新的 IdToken,以及 Cognito 授权方需要的令牌名称。在我的示例中,它是 auth_token。

      import requests 
      import json
      
      CustomHeader = {'auth_token': "very-long-id-token"} 
      r = requests.post(
          "https://xxx.execute-api.us-east-1.amazonaws.com/beta/user/function-for-auth-users-only",
          data=json.dumps({"whatever_you_need": "your_value"}),
          headers=CustomHeader) 
      print(r.json())
      

      【讨论】:

        猜你喜欢
        • 2020-06-23
        • 2020-07-29
        • 2019-11-27
        • 1970-01-01
        • 1970-01-01
        • 2022-11-02
        • 2023-03-19
        • 2016-10-25
        • 2017-11-23
        相关资源
        最近更新 更多