我有一个POSTMAN查询来获取我们端点的访问令牌。 POSTMAN的后期查询是: phmo-test / auth.us-east-1.amazoncognito.com / oauth2 / token?grant_type = client_credentials 授权具有客户端ID和客户端密钥。而且它的工作非常正常,并向我返回了访问令牌。 我必须将此POSTMAN查询转换为python代码。我认为这很简单,就像使用REQUESTS库编写任何其他POST查询一样,但它似乎没有用。
[xdebug]
xdebug.remote_enable=on
xdebug.remote_connect_back=1
xdebug.remote_port=9000
xdebug.remote_host=host.docker.internal
xdebug.remote_handler=dbgp
; xdebug.remote_log="/var/log/xdebug.log"
xdebug.remote_autostart = on
xdebug.idekey='VSCODE'
xdebug.var_display_max_children = -1
xdebug.var_display_max_data = -1
xdebug.var_display_max_depth = -1
这没有返回我状态代码。我在做什么错了?
答案 0 :(得分:0)
Python有一个很棒的库,您可以使用它来简单地为您准备事情。 您可以使用boto3中的initiate_auth获取所有令牌。您需要在authflow,客户端ID和用户凭据中指定USER_PASSWORD_AUTH。
答案 1 :(得分:0)
文档中没有最清楚地解释,但它在那里: https://docs.aws.amazon.com/cognito/latest/developerguide/token-endpoint.html
这是使用客户端凭据流从 Cognito OAuth2.0 获取令牌的方法:
import base64
import requests
oauth_base_url = "https://YOUR_THING.auth.eu-west-1.amazoncognito.com/oauth2/token"
client_id = "get_from_cognito"
client_secret = "get_from_cognito"
grant_type = "client_credentials"
scope = "scope_namespace/scope_name" # defined in Cognito
# Base64 encode auth info and add to headers
auth_b64 = base64.b64encode(f"{client_id}:{client_secret}".encode())
oauth_headers = {
"Content-Type": "application/x-www-form-urlencoded",
"Authorization": f"Basic {auth_b64.decode('utf-8')}",
}
# Message body is text as docs define:
oauth_payload_txt = f"""grant_type={grant_type}&
client_id={client_id}&
scope={scope}
"""
# Post returns JSON with "access_token" as the Bearer token.
resp = requests.post(oauth_base_url, headers=oauth_headers, data=oauth_payload_txt)
print(resp.json())