假设我有一个需要在后台服务中访问Drive文件的Web应用程序.它将拥有自己正在访问的文件,或者在所有者共享文档的Google帐户中运行.
我知道我的应用程序需要一个刷新令牌,但我不想编写代码来获取它,因为我只会做一次.
NB.这不是使用服务帐户.该应用将在传统的Google帐户下运行.在某些情况下,服务帐户是一种有效的方法.但是,使用Oauth Playground模拟应用程序的技术可以节省大量的冗余工作,并适用于不支持与服务帐户共享的任何API.
我正在尝试授权我的应用程序与Google云端硬盘集成.谷歌文档提供了基于服务器的授权和代码示例细节的各种服务器技术.
还有一个JavaScript Google API库,它支持授权.在维基的示例部分中,有一个用于创建配置和调用授权功能的代码片段.我已将范围改为我认为驱动所需的范围:
var config = {
'client_id': 'my_client_ID',
'scope': 'https://www.googleapis.com/auth/drive.file'
};
gapi.auth.authorize(config, function() {
console.log(gapi.auth);
});
Run Code Online (Sandbox Code Playgroud)
永远不会调用回调函数(是的,已加载Google API库)查看Java Retrieve和使用OAuth 2.0凭据示例,客户端机密似乎是一个参数,如果进入配置?
有没有人在JS,Drive或其他Google API中试过这个?有谁知道调试这样一个问题的最佳途径,即我是否需要单步执行库并停止发牢骚?
请不要建议在服务器端进行授权,我们的应用程序完全是客户端,我不希望服务器上有任何状态(我理解这将导致令牌刷新问题).我熟悉Google控制台中的API配置,我相信它和驱动器SDK设置是正确的.
我正在尝试使用Google驱动器列出文件.
使用/sf/answers/789618021/中的答案我发现了一个我无法找到原因的问题.
var clientId = '*********.apps.googleusercontent.com';
var apiKey = '##########';
var scopes = 'https://www.googleapis.com/auth/drive';
function handleClientLoad() {
gapi.client.setApiKey(apiKey);
window.setTimeout(checkAuth,1);
}
function checkAuth() {
gapi.auth.authorize({client_id: clientId, scope: scopes, immediate: true},handleAuthResult);
}
function handleAuthResult(authResult) {
var authorizeButton = document.getElementById('authorize-button');
if (authResult && !authResult.error) {
authorizeButton.style.visibility = 'hidden';
makeApiCall();
}
else {
authorizeButton.style.visibility = '';
authorizeButton.onclick = handleAuthClick;
}
}
function handleAuthClick(event) {
gapi.auth.authorize({client_id: clientId, scope: [scopes], immediate: false}, handleAuthResult);
return false;
}
function makeApiCall() {
gapi.client.load('drive', 'v2', makeRequest);
}
function …Run Code Online (Sandbox Code Playgroud)