这是获取刷新令牌所需要做的所有事情,代码 sn-ps 在C#
第1步: 访问以下网址并完成步骤。在最后一步,您应该看到屏幕上打印了Access Code Generated,复制代码。
https://www.dropbox.com/oauth2/authorize?client_id=YOUR_APP_KEY&response_type=code&token_access_type=offline
第2步:使用以下代码获取刷新令牌:(注意:你只需要做一次)
using (var httpClient = new HttpClient())
{
using (var request = new HttpRequestMessage(new HttpMethod("POST"), "https://api.dropbox.com/oauth2/token"))
{
var base64authorization = Convert.ToBase64String(Encoding.ASCII.GetBytes("YOUR_APP_KEY:YOUR_APP_SECRET"));
request.Headers.TryAddWithoutValidation("Authorization", $"Basic {base64authorization}");
var contentList = new List<string>();
contentList.Add("code=ACCESS_CODE_FROM_STEP_1");
contentList.Add("grant_type=authorization_code");
request.Content = new StringContent(string.Join("&", contentList));
request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/x-www-form-urlencoded");
var response = await httpClient.SendAsync(request);
// process the response
}
}
响应应该是这样的:
{
"uid": "XXXXXXXX",
"access_token": "XXXXXXXX",
"expires_in": 14400,
"token_type": "bearer",
"scope": "files.content.read files.content.write",
"refresh_token": "XXXXXXXX",
"account_id": "dbid:XXXXXXXX"
}
您正在寻找refresh_token。你应该安全地存放它
步骤 3:任何时候你需要一个新的访问令牌,运行下面的代码:
using (var httpClient = new HttpClient())
{
using (var request = new HttpRequestMessage(new HttpMethod("POST"), $"https://api.dropbox.com/oauth2/token"))
{
var base64authorization = Convert.ToBase64String(Encoding.ASCII.GetBytes("YOUR_APP_KEY:YOUR_APP_SECRET"));
request.Headers.TryAddWithoutValidation("Authorization", $"Basic {base64authorization}");
var contentList = new List<string>();
contentList.Add("refresh_token=REFRESH_TOEKN");
contentList.Add("grant_type=refresh_token");
request.Content = new StringContent(string.Join("&", contentList));
request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/x-www-form-urlencoded");
var res = httpClient.SendAsync(request).Result;
// process the response
}
}
响应应该是这样的:
{
"access_token": "XXXXXXXX",
"token_type": "bearer",
"expires_in": 14400
}
您正在寻找access_token。还要注意 expires_in 值,您可以而且可能应该将 access_token 存储在某种内存缓存中,以防止在每次 API 调用时请求新令牌。
这是用于获取新刷新令牌的 curl。
curl https://api.dropbox.com/oauth2/token -d grant_type=refresh_token -d refresh_token=<REFRESH_TOKEN> -u <APP_KEY>:<APP_SECRET>