【Photoshop API 】三、C++获取 access_token

本文档介绍了如何使用C++通过JWT(JSON Web Token)与Adobe Identity Management Service (IMS)交互,以获取访问令牌。这个过程涉及向IMS发送POST请求,包含API密钥、客户端秘密和Base64编码的JWT。提供的C++代码示例展示了如何实现这一流程,注意令牌每24小时会过期,需要刷新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

获取办法:https://www.adobe.io/authentication/auth-methods.html#!AdobeDocs/adobeio-auth/master/JWT/JWT.md
前一篇:【Photoshop API 】curl工具获取 access_token

交换JWT以检索访问令牌

要启动API会话,请使用JWT通过向Adobe Identity Management Service(IMS)发出POST请求来从Adobe获取访问令牌。

  • 发送POST请求至:

https://ims-na1.adobelogin.com/ims/exchange/jwt

  • 请求的正文应包含带有您的客户端ID(API密钥),客户端密钥和JWT的URL编码参数:

client_id={api_key_value}&client_secret={client_secret_value}&jwt_token={base64_encoded_JWT}

请求参数

在POST请求的主体中传递URL编码的参数:

范围描述
client_id为您的集成生成的API密钥。
client_secret为您的集成生成的客户端机密。
jwt_token一个以base-64编码的JSON Web令牌,它封装了您的集成的身份,并用一个私钥签名,该私钥与附加到该集成的公钥证书相对应。

 

c++ 获取案例:

注意:您的令牌将每24小时过期,并且需要在过期后进行刷新

// POSTDemo2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <curl/curl.h>
#include <json/json.h>
#pragma warning(disable:4996)


using namespace std;
//get请求和post请求数据响应函数
size_t req_reply(void *ptr, size_t size, size_t nmemb, void *stream)
{
	//在注释的里面可以打印请求流,cookie的信息
	//cout << "----->reply" << endl;
	string *str = (string*)stream;
	//cout << *str << endl;
	(*str).append((char*)ptr, size*nmemb);
	return size * nmemb;
}
//http POST请求  
CURLcode curl_post_req(const string &url, const string &postParams, string &response)
{
	// curl初始化  
	CURL *curl = curl_easy_init();
	// curl返回值 
	CURLcode res;
	if (curl)
	{
		// set params
		//设置curl的请求头
		struct curl_slist* header_list = NULL;
		header_list = curl_slist_append(header_list, "Cache-Control: no-cache");
		header_list = curl_slist_append(header_list, "Content-Type: application/x-www-form-urlencoded");
		curl_easy_setopt(curl, CURLOPT_HTTPHEADER, header_list);

		//不接收响应头数据0代表不接收 1代表接收
		curl_easy_setopt(curl, CURLOPT_HEADER, 0);

		//设置请求为post请求
		curl_easy_setopt(curl, CURLOPT_POST, 1);

		//设置请求的URL地址
		curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
		//设置post请求的参数
		curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postParams.c_str());

		//设置ssl验证
		curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
		curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false);

		//CURLOPT_VERBOSE的值为1时,会显示详细的调试信息
		curl_easy_setopt(curl, CURLOPT_VERBOSE, 0);

		curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);

		//设置数据接收和写入函数
		curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, req_reply);
		curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&response);

		curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);

		//设置超时时间
		curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 6);
		curl_easy_setopt(curl, CURLOPT_TIMEOUT, 6);

		// 开启post请求
		res = curl_easy_perform(curl);
	}
	//释放curl 
	curl_easy_cleanup(curl);
	return res;
}
int main()
{
	string url_post0 = "https://ims-na1.adobelogin.com/ims/exchange/jwt/";
	string paramsLogin0 = "client_id=e2096177e13f4ad89c9bda489b7824e1&client_secret=9692444c-2b83-4f57-ac0d-bfa058dd868f&jwt_token=eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE2MTk1MTc0MzksImlzcyI6IjQ5QjcwNDZDNUY2RDhFNkQwQTQ5NUZEOEBBZG9iZU9yZyIsInN1YiI6IjUwODc3NjgxNjA4Njg2M0EwQTQ5NUM3MUB0ZWNoYWNjdC5hZG9iZS5jb20iLCJodHRwczovL2ltcy1uYTEuYWRvYmVsb2dpbi5jb20vcy9lbnRfY2Nhc19zZGsiOnRydWUsImF1ZCI6Imh0dHBzOi8vaW1zLW5hMS5hZG9iZWxvZ2luLmNvbS9jL2UyMDk2MTc3ZTEzZjRhZDg5YzliZGE0ODliNzgyNGUxIn0.TJGO_TN5opD0trnvc7VCNgB6a2UAj1OTR5lfIRtATR2YlC4KzXKiMtarRbOn6i2vwFRUMzLuUbi_E45IwPJChHmyfYprXiq9Wg9k4XNy0GTZq_8VzE9CZTKTlGbv_4aldQagOBtzegrOqGrLILvSXYbh8Hfb5SNRnnisAAdzpV2vUkQGfcTZl0QNDIagoJJiVis-HRyB4dGk74DlWM7r-1afBvoHv_Tl0pfhN-gMFq5hIN7ZEHHdNEaxGjb6p5XBr64x-r61kVrlSheIQbwDCcoFlFm4hIo-QXBh6Wr3IxfwM2B2Wm_l6sF-VcJm2Qq9Wyqbgzbb1VXKlUQ8ISGiJw";
	string resPost0;
	auto res3 = curl_post_req(url_post0, paramsLogin0, resPost0);
	if (res3 == CURLE_OK)
	{
		cout << resPost0 << endl;
	}

	getchar();
	return 0;
}



 

 

获取access_token通常用于API认证和授权。以下是获取access_token的一般步骤: 1. **注册应用**: 首先,你需要在提供API的平台上注册一个应用。通常,你需要在开发者控制台中创建一个应用,并获取`Client ID`和`Client Secret`。 2. **获取授权码**: 如果是OAuth 2.0流程,用户需要先授权你的应用。可以通过引导用户访问授权URL,用户授权后会返回一个授权码(authorization code)。 3. **交换授权码获取access_token**: 使用获取到的授权码,发送一个POST请求到令牌端点(token endpoint),并附带`Client ID`、`Client Secret`和授权码。服务器会返回一个包含access_token的响应。 4. **使用access_token**: 拿到access_token后,你就可以在后续的API请求中使用它进行身份验证和授权。 以下是一个示例代码,展示如何通过OAuth 2.0流程获取access_token: ```python import requests # 1. 注册应用获取的Client ID和Client Secret client_id = 'your_client_id' client_secret = 'your_client_secret' # 2. 获取授权码 authorization_code = 'authorization_code_from_user' # 3. 交换授权码获取access_token token_url = 'https://api.example.com/oauth/token' payload = { 'grant_type': 'authorization_code', 'code': authorization_code, 'client_id': client_id, 'client_secret': client_secret } response = requests.post(token_url, data=payload) access_token = response.json().get('access_token') print(f'Access Token: {access_token}') ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值