如何将接收到的(承载)访问令牌传递给生成的 REST 客户端,以调用安全的 API-Gateway 端点

Posted

技术标签:

【中文标题】如何将接收到的(承载)访问令牌传递给生成的 REST 客户端,以调用安全的 API-Gateway 端点【英文标题】:How to pass received (bearer) access token to generated REST Client in order to invoke secured API-Gateway Endpoint 【发布时间】:2021-05-12 09:11:04 【问题描述】:

我对 AWS 及其 Cognito 和 API-Gateway 服务相当陌生。 我在 AWS 中创建了一个特定于 Cognito 的用户池和一个特定于 AWS 的 API-Gateway API,其中一些 API-Endpoints 可以通过 REST API 调用进行访问。 API-Gateway“授权者”设置为“Cognito”。 之后,我使用 AWS-Console 特定的导出功能导出了 Swagger 文档/OpenAPI2.0,并使用 Swagger Editor 生成了 Python REST 客户端 API。

生成的 REST 客户端 SDK 生成特定于模型的“GET”函数,例如。 g.:

# create an instance of the API class
api_instance = swagger_client.DefaultApi()
user_id = 'user_id_example' # str | 

try:
    api_response = api_instance.user_get(user_id)
    pprint(api_response)
except ApiException as e:
    print("Exception when calling DefaultApi->user_get: %s\n" % e)

为了从函数调用api_instance.user_get(user_id)中得到正确的结果 我需要以某种方式将访问令牌传递给该函数。

现在的问题是,如何将访问令牌(在用户登录后成功获得)传递给 Python REST 客户端 API,以调用具有“Cognito”授权方的 API-Endpoint 函数设置好了吗?

我看到了许多示例如何使用 Postman 或 CURL 实现这一点,但这不是我想要的。我想使用生成的 REST API 客户端在 AWS API-Gateway 中调用我的“Cognito”受保护的 API-Endpoint。我认为,在调用生成的 REST 客户端函数之前,必须有一种方法可以将接收到的访问令牌放入 HTTP 请求调用中的“授权”标头中。

非常感谢任何帮助。

【问题讨论】:

对于您的执行流程来说,this 是不是更好的选择? @amitd:感谢您的意见。但这与我的问题不符。重点是利用 AWS 控制台生成的 API-GW 开发工具包。必须有一种简单的方法将访问令牌传递给生成的函数。 【参考方案1】:

我不确定我是否正确理解了您,但这可能会对您有所帮助。

import requests
endpoint = ".../api/ip"
data = "ip": "1.1.2.3"
headers = "Authorization": "Bearer MyBearerAuthTokenHere"

print(requests.post(endpoint, data=data, headers=headers).json())

#编辑 如果不是,则不需要将响应解析为 json。这只是一个示例。

【讨论】:

我已经更新了我的问题。希望,现在更容易理解了。

以上是关于如何将接收到的(承载)访问令牌传递给生成的 REST 客户端,以调用安全的 API-Gateway 端点的主要内容,如果未能解决你的问题,请参考以下文章

如何在websocket javascript客户端中传递授权承载访问令牌

如何使用 jwt 公钥在 Spring Boot 中验证承载访问令牌

如何将承载令牌添加到 HTTP 请求的标头?

Swift:如何将从委托接收到的值传递给函数的完成块?

如何将从数据库接收到的数据作为道具传递给 Reactjs 中的另一个组件

如何将标头身份验证承载中的令牌发送到浏览器