如何编写代码以获取AWS Cognito访问令牌?

时间:2019-05-30 13:14:10

标签: token amazon-cognito

我有一个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

这没有返回我状态代码。我在做什么错了?

2 个答案:

答案 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())