本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
第 3 步:获取访问令牌并提出API请求
此示例将介绍设置访问令牌的步骤,然后向您展示如何提出基本API请求。这将为您提供基础知识,让您可以开始构建由 Amazon DCV API 提供支持的更高级的应用程序。
在此示例中,我们将向您展示如何使用来执行此操作DescribeSessions
API。
首先,我们导入应用程序所需的模型。
然后我们为客户端 ID (__CLIENT_ID
)、客户端密码 (__CLIENT_SECRET
) 和代理声明变量URL,包括端口号 (__PROTOCOL_HOST_PORT
)。
接下来,我们创建一个名为 build_client_credentials
的函数以生成客户端凭证。要生成客户端凭证,您必须先串联客户端 ID 和客户端密码并用冒号(
)分隔这些值,然后对整个字符串进行 Base64 编码。client_ID
:client_password
import swagger_client import base64 import requests import json from swagger_client.models.describe_sessions_request_data import DescribeSessionsRequestData from swagger_client.models.key_value_pair import KeyValuePair from swagger_client.models.delete_session_request_data import DeleteSessionRequestData from swagger_client.models.update_session_permissions_request_data import UpdateSessionPermissionsRequestData from swagger_client.models.create_session_request_data import CreateSessionRequestData __CLIENT_ID = '794b2dbb-bd82-4707-a2f7-f3d9899cb386' __CLIENT_SECRET = 'MzcxNzJhN2UtYjEzNS00MjNjLTg2N2YtMjFlZmRlZWNjMDU1' __PROTOCOL_HOST_PORT = 'https://<broker-hostname>:8443' def build_client_credentials(): client_credentials = '{client_id}:{client_secret}'.format(client_id=__CLIENT_ID, client_secret=__CLIENT_SECRET) return base64.b64encode(client_credentials.encode('utf-8')).decode('utf-8')
现在我们生成了客户端凭证,可以使用该凭证从 Broker 中请求访问令牌。为此,我们创建一个名为 get_access_token
的函数。您必须对 https://
调用 Broker_IP
:8443
/oauth2/token?grant_type=client_credentialsPOST
并提供授权标头,其中包括 Basic 编码的客户端凭证和内容类型 application/x-www-form-urlencoded
。
def get_access_token(): client_credentials = build_client_credentials() headers = { 'Authorization': 'Basic {}'.format(client_credentials), 'Content-Type': 'application/x-www-form-urlencoded' } endpoint = __PROTOCOL_HOST_PORT + '/oauth2/token?grant_type=client_credentials' print('Calling', endpoint, 'using headers', headers) res = requests.post(endpoint, headers=headers, verify=True) if res.status_code != 200: print('Cannot get access token:', res.text) return None access_token = json.loads(res.text)['access_token'] print('Access token is', access_token) return access_token
现在,我们创建实例化客户端所需的函数。API要实例化客户端API,必须指定客户端配置和用于请求的标头。get_client_configuration
函数创建一个配置对象,其中包括 Broker 的 IP 地址和端口以及 Broker 自签名证书的路径(您应该从 Broker 管理员处收到了该证书)。set_request_headers
函数创建一个请求标头对象,其中包括客户端凭证和访问令牌。
def get_client_configuration(): configuration = swagger_client.Configuration() configuration.host = __PROTOCOL_HOST_PORT configuration.verify_ssl = True # configuration.ssl_ca_cert = cert_file.pem return configuration def set_request_headers(api_client): access_token = get_access_token() api_client.set_default_header(header_name='Authorization', header_value='Bearer {}'.format(access_token)) def get_sessions_api(): api_instance = swagger_client.SessionsApi(swagger_client.ApiClient(get_client_configuration())) set_request_headers(api_instance.api_client) return api_instance
最后,我们创建了一个主方法来调用 DescribeSessions
API. 有关更多信息,请参阅 DescribeSessions。
def describe_sessions(session_ids=None, next_token=None, tags=None, owner=None): filters = list() if tags: for tag in tags: filter_key_value_pair = KeyValuePair(key='tag:' + tag['Key'], value=tag['Value']) filters.append(filter_key_value_pair) if owner: filter_key_value_pair = KeyValuePair(key='owner', value=owner) filters.append(filter_key_value_pair) request = DescribeSessionsRequestData(session_ids=session_ids, filters=filters, next_token=next_token) print('Describe Sessions Request:', request) api_instance = get_sessions_api() api_response = api_instance.describe_sessions(body=request) print('Describe Sessions Response', api_response) def main(): describe_sessions( session_ids=['SessionId1895', 'SessionId1897'], owner='an owner 1890', tags=[{'Key': 'ram', 'Value': '4gb'}])