簡體   English   中英

在 Python 中的 API 網關請求中使用 AWS Cognito 訪問令牌

[英]Using AWS Cognito access token in requests for API gateway in Python

我已經能夠為我的 Aws Cognito 用戶獲取訪問令牌(使用this )。 但我無法弄清楚如何使用它為具有 Cognito 授權方的 Api 網關生成經過身份驗證的請求 有人可以分享一個示例片段嗎?

問題應該出在 API 網關和 Cognito 用戶池配置中。 您可以在標頭請求中使用 id 令牌而不是訪問令牌,如果 API 網關和 Cognito 用戶池具有基本配置,它應該可以工作。

如果您更喜歡使用訪問令牌,則必須檢查 API 網關和 Cognito 用戶池的配置中的一些細節:Cognito 中應有一個資源服務器,同時在 API 網關的方法請求中應一致地定義 OAuth Scopes資源服務器。 您可以在以下問題中找到有關此配置的很好的解釋: AWS API Gateway - using Access Token with Cognito User Pool authorizer?

我建議您采用最后一種方式並使用訪問令牌。

關於請求頭,放'Authorization':YOUR_ACCESS_TOKEN就夠了。 在 API Gateway 中創建 Authorizer 時,檢查是否在 Token Source 中添加了“Authorizarion”。

發出 API 網關請求時,將從 Cognito 用戶池獲取的訪問或 id 令牌放在 Authentication 標頭中

我的回答假設您擁有 Cognito Authorizer,而不是 Lambda Authorizer。 創建 Cognito Authorizer 時,您在 Token Source 字段中提供授權令牌的名稱。 例如, auth_token

調用授權人被搞砸的API資源,需要當前登錄的用戶的IdToken

借助 lambda 函數,您可以通過獲取IdTokenAccessTokenRefreshToken來組織用戶登錄。 IdToken 和 AccessToken 壽命不長。 您可以創建一個 lambda 函數,將 RefreshToken 發送到用戶池並作為響應取回新的 IdToken。 在此處閱讀有關所有這些內容的更多信息。

因此,您擁有一個新的 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())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM