Nir*_*nja 52 authorization google-drive-api
我已经完成了授权步骤并获得了访问令牌和刷新令牌.
我应该怎么做才能使用我通过谷歌驱动API存储的刷新令牌生成访问令牌?
因为我在Force.com上工作所以我将无法使用任何sdk所以请建议直接通过API实现它的方法.
Cla*_*ino 29
如果您想自己实现,请在https://developers.google.com/accounts/docs/OAuth2WebServer上记录Web服务器应用程序的OAuth 2.0流程,特别是您应该查看有关使用刷新令牌的部分:
https://developers.google.com/accounts/docs/OAuth2WebServer#refresh
Ash*_*ngh 25
如果您使用的是web api,那么您应该POST
对URL 进行http 调用:https://www.googleapis.com/oauth2/v4/token
使用以下请求正文
client_id: <YOUR_CLIENT_ID>
client_secret: <YOUR_CLIENT_SECRET>
refresh_token: <REFRESH_TOKEN_FOR_THE_USER>
grant_type: refresh_token
Run Code Online (Sandbox Code Playgroud)
刷新令牌永不过期,因此您可以使用它任意次.响应将是这样的JSON:
{ access_token: 'ya....', token_type: 'Bearer', expires_in: 3599 }
Run Code Online (Sandbox Code Playgroud)
amo*_*mos 21
这是一个古老的问题,但在我看来并没有完全回答,我也需要这些信息所以我会发布我的答案.
如果您想使用Google Api客户端库,那么您只需要一个包含刷新令牌的访问令牌,然后 - 即使访问令牌在一小时后过期 - 库也会为您刷新令牌自动.
为了获得带有刷新令牌的访问令牌,您只需要求离线访问类型(例如在PHP中$client->setAccessType("offline");
),您就可以获得它.请记住,只有在第一次授权时才会获得带有刷新令牌的访问令牌,因此请确保在第一次保存该访问令牌,并且您随时都可以使用它.
希望能帮到任何人:-)
您需要做的就是一个像下面这样的帖子请求:-
POST https://www.googleapis.com/oauth2/v4/token
Content-Type: application/json
{
"client_id": <client_id>,
"client_secret": <client_secret>,
"refresh_token": <refresh_token>,
"grant_type": "refresh_token"
}
Run Code Online (Sandbox Code Playgroud)
只是发布我的答案,以防它对任何人有帮助,因为我花了一个小时才弄清楚:)
首先,有两个非常有用的链接,与 google api 和从任何 google 服务获取数据相关:
https://developers.google.com/analytics/devguides/config/mgmt/v3/quickstart/web-php
https://developers.google.com/identity/protocols/OAuth2WebServer
此外,当使用以下方法时:
$client->setAccessToken($token)
需要$token
是谷歌在发出授权请求时返回的完整对象,而不是access_token
您在对象内部获得的唯一对象,因此如果您获得该对象,可以说:
{“access_token”:“xyz”,“token_type”:“承载”,“expires_in”:3600,“refresh_token”:“mno”,“创建”:1532363626}
那么你需要给出:
$client->setAccessToken('{"access_token":"xyz","token_type":"Bearer","expires_in":3600,"refresh_token":"mno","created":1532363626}')
不是
$client->setAccessToken('xyz')
然后,即使你的过期了,谷歌也会通过使用对象中的access_token
来刷新它。refresh_token
access_token
如果您使用 Java,请按照以下代码片段操作:
GoogleCredential refreshTokenCredential = new GoogleCredential.Builder()
.setJsonFactory(JSON_FACTORY)
.setTransport(HTTP_TRANSPORT)
.setClientSecrets(CLIENT_ID, CLIENT_SECRET)
.build()
.setRefreshToken(yourOldToken);
refreshTokenCredential.refreshToken(); //do not forget to call this
String newAccessToken = refreshTokenCredential.getAccessToken();
Run Code Online (Sandbox Code Playgroud)
小智 6
使用邮政电话,为我工作。
RestClient restClient = new RestClient();
RestRequest request = new RestRequest();
request.AddQueryParameter("client_id", "value");
request.AddQueryParameter("client_secret", "value");
request.AddQueryParameter("grant_type", "refresh_token");
request.AddQueryParameter("refresh_token", "value");
restClient.BaseUrl = new System.Uri("https://oauth2.googleapis.com/token");
restClient.Post(request);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
88293 次 |
最近记录: |