如何设置 Google Drive Client ID 以便在没有本地服务器的情况下进行访问?
How to set up a Google Drive Client ID for access without a local server?
我想知道是否有可能,比如说,在一台随机计算机上打开一个 jsfiddle 并登录并验证并使用驱动器 API,而无需本地服务器运行一直在宁?究竟该如何设置呢?如果这是一个简单的问题,我很抱歉,但我有点迷路了,因为到目前为止我发现的说明还不清楚。
编辑:
- 通过 Google Developers Console 创建了一个项目。
- 在那里打开该项目,导航到 APIs 下的 APIs & auth,并确保驱动器 API 已启用
- 进入凭据,然后单击 "Create a new Client ID"
- 已选择"Web Application"
- 将授权的 javascript 来源设置为 http://localhost:4567
- 删除重定向 URI 中的所有内容并将其留空,然后按 "Create Client ID."
- 像 this, this, or this 这样的样本,并将其存储在名为 index.html 的本地文件中。
- 这不会 运行 只需在浏览器中打开,所以我必须托管一个本地服务器
- 我在命令行中导航到该目录,然后键入 "python -m SimpleHTTPServer 4567"(不带引号),这托管了一个本地服务器
- 在我的网络浏览器中打开 http://localhost:4567,在将新创建的客户端 ID 复制到他们要求的这些文件后,所有这些示例都工作正常。
我也做了python申请,要用pydrive我:
- 点击 "Create a new Client ID",然后点击 "Installed Application" 和 "Other",然后点击 "Create Client ID."
- 接下来我转到 Old Google APIs Console,单击 API 访问,找到客户端 ID,然后单击下载 JSON。
- 我将这个 client_secrets.json 放在我的 python 应用程序旁边,这允许 pydrive 成功验证,我可以使用该客户端 ID 在任何地方访问和修改我的 google 驱动器文件。当然,我在将申请交给其他人之前删除了这个 client_secrets.json,并向他们展示了如何执行此过程。
但是,除此之外,我有点不确定,具体来说:
- 如何在 Web 应用程序中使用驱动器 api 而无需设置本地服务器,只需在 jsfiddle 中 运行ning 代码并通过使用客户端 ID,以及
- 如果本地服务器设置为网络上的任何人都可以访问,如何修改上述步骤以允许任何客户端打开该服务器的网页以使用 google 驱动器 API?
我知道我很可能需要在开发人员控制台中设置 Public API 访问权限,但我也不完全确定我应该使用哪些 Referer。那么有没有一种简单的方法可以做到这一点?
我也知道 gspread 只能使用客户的用户名和密码打开 google excel 电子表格,所以我怀疑我正在寻找的东西是可能的,但我不确定。
好的,所以我找到了一个非常有效的解决方案:
- 创建一个 OAuth.io 帐户(免费)。
- 登录后,转到 oauth.io dashboard。
- 您应该查看默认应用程序,或者您可以制作另一个并不重要。
- 在 "Domains & URLs whitelist" 下,您会看到一个小方框,上面写着 "localhost." 输入“
http://fiddle.jshell.net/"(不带引号)并按回车键。这允许任何 jsfiddle 通过您的应用程序进行身份验证
- 接下来,我们需要启用Google驱动器支持
- 转到 Google 开发者控制台
- 像以前一样,导航到 API 和 Auth 下的凭据。
- 点击"Create new Client ID"
- Select 网络应用程序
- 在 "Redirect URIs" 下放置“https://oauth.io/auth" and "http://oauth.io/auth”(不带引号,分行)
- 在"Javascript Origins"下放“https://oauth.io" and "http://oauth.io”
- 按"Create Client ID"
- 现在去你的Oauth.io key manager。单击左侧列表中的 Google 驱动器。按下一步,然后输入您在上一步中创建的 client_id 和 client_secret(通过 Google Developers Console)
- Select 在线(至少在线是首选,因为离线应该只用于服务器端)
- 单击 Scope 教科书,然后 select“https://www.googleapis.com/auth/drive(查看和管理 google 驱动器中的文件)”。
- 按完成。现在点击 Try Auth 按钮,希望你应该得到一些像
这样的输出
{
"access_token": "ya29.AwH-1N_gnstLBuZfOR4W9CCcggKrQpMyKYV4QVEtCiIzHozNU5AfUJoYQzukALfjdiw2iOCUve7JbQ",
"token_type": "Bearer",
"expires_in": 3600,
"provider": "google_drive"
}
要使用它,您可以执行以下操作:
// This only works because we're set to "No wrap - in <head>"
function ShowDriveFileList() {
var accessToken;
// Initialize OAuth with our key
OAuth.initialize('lmGlb8BaftfF4Y5en_c8XYOSq2A');
// Connect to google drive, and print out file list
OAuth.popup('google_drive').done(function (result) {
var xmlHttp = null;
xmlHttp = new XMLHttpRequest();
xmlHttp.open("GET", "https://www.googleapis.com/drive/v2/files", false);
xmlHttp.setRequestHeader("Authorization", "Bearer " + result.access_token);
xmlHttp.send(null);
alert(xmlHttp.responseText);
}).fail(function (err) {
alert(err);
});;
}
您可以在 http://jsfiddle.net/JMTVz/41/ 找到。这使用了我的 oauth.io 客户端 ID,但您可以将其替换为您的,它应该也能正常工作。
您可以使用 OAuth Playground 做同样的事情。
见How do I authorise an app (web or installed) without user intervention? (canonical ?)
第 11 步会有所不同。不是将刷新令牌粘贴到您的服务器应用程序(您没有),而是将访问令牌粘贴到您的 JS 中,就像您在回答中所做的那样。
我想知道是否有可能,比如说,在一台随机计算机上打开一个 jsfiddle 并登录并验证并使用驱动器 API,而无需本地服务器运行一直在宁?究竟该如何设置呢?如果这是一个简单的问题,我很抱歉,但我有点迷路了,因为到目前为止我发现的说明还不清楚。
编辑:
- 通过 Google Developers Console 创建了一个项目。
- 在那里打开该项目,导航到 APIs 下的 APIs & auth,并确保驱动器 API 已启用
- 进入凭据,然后单击 "Create a new Client ID"
- 已选择"Web Application"
- 将授权的 javascript 来源设置为 http://localhost:4567
- 删除重定向 URI 中的所有内容并将其留空,然后按 "Create Client ID."
- 像 this, this, or this 这样的样本,并将其存储在名为 index.html 的本地文件中。
- 这不会 运行 只需在浏览器中打开,所以我必须托管一个本地服务器
- 我在命令行中导航到该目录,然后键入 "python -m SimpleHTTPServer 4567"(不带引号),这托管了一个本地服务器
- 在我的网络浏览器中打开 http://localhost:4567,在将新创建的客户端 ID 复制到他们要求的这些文件后,所有这些示例都工作正常。
我也做了python申请,要用pydrive我:
- 点击 "Create a new Client ID",然后点击 "Installed Application" 和 "Other",然后点击 "Create Client ID."
- 接下来我转到 Old Google APIs Console,单击 API 访问,找到客户端 ID,然后单击下载 JSON。
- 我将这个 client_secrets.json 放在我的 python 应用程序旁边,这允许 pydrive 成功验证,我可以使用该客户端 ID 在任何地方访问和修改我的 google 驱动器文件。当然,我在将申请交给其他人之前删除了这个 client_secrets.json,并向他们展示了如何执行此过程。
但是,除此之外,我有点不确定,具体来说:
- 如何在 Web 应用程序中使用驱动器 api 而无需设置本地服务器,只需在 jsfiddle 中 运行ning 代码并通过使用客户端 ID,以及
- 如果本地服务器设置为网络上的任何人都可以访问,如何修改上述步骤以允许任何客户端打开该服务器的网页以使用 google 驱动器 API?
我知道我很可能需要在开发人员控制台中设置 Public API 访问权限,但我也不完全确定我应该使用哪些 Referer。那么有没有一种简单的方法可以做到这一点?
我也知道 gspread 只能使用客户的用户名和密码打开 google excel 电子表格,所以我怀疑我正在寻找的东西是可能的,但我不确定。
好的,所以我找到了一个非常有效的解决方案:
- 创建一个 OAuth.io 帐户(免费)。
- 登录后,转到 oauth.io dashboard。
- 您应该查看默认应用程序,或者您可以制作另一个并不重要。
- 在 "Domains & URLs whitelist" 下,您会看到一个小方框,上面写着 "localhost." 输入“ http://fiddle.jshell.net/"(不带引号)并按回车键。这允许任何 jsfiddle 通过您的应用程序进行身份验证
- 接下来,我们需要启用Google驱动器支持
- 转到 Google 开发者控制台
- 像以前一样,导航到 API 和 Auth 下的凭据。
- 点击"Create new Client ID"
- Select 网络应用程序
- 在 "Redirect URIs" 下放置“https://oauth.io/auth" and "http://oauth.io/auth”(不带引号,分行)
- 在"Javascript Origins"下放“https://oauth.io" and "http://oauth.io”
- 按"Create Client ID"
- 现在去你的Oauth.io key manager。单击左侧列表中的 Google 驱动器。按下一步,然后输入您在上一步中创建的 client_id 和 client_secret(通过 Google Developers Console)
- Select 在线(至少在线是首选,因为离线应该只用于服务器端)
- 单击 Scope 教科书,然后 select“https://www.googleapis.com/auth/drive(查看和管理 google 驱动器中的文件)”。
- 按完成。现在点击 Try Auth 按钮,希望你应该得到一些像 这样的输出
{ "access_token": "ya29.AwH-1N_gnstLBuZfOR4W9CCcggKrQpMyKYV4QVEtCiIzHozNU5AfUJoYQzukALfjdiw2iOCUve7JbQ", "token_type": "Bearer", "expires_in": 3600, "provider": "google_drive" }
要使用它,您可以执行以下操作:
// This only works because we're set to "No wrap - in <head>"
function ShowDriveFileList() {
var accessToken;
// Initialize OAuth with our key
OAuth.initialize('lmGlb8BaftfF4Y5en_c8XYOSq2A');
// Connect to google drive, and print out file list
OAuth.popup('google_drive').done(function (result) {
var xmlHttp = null;
xmlHttp = new XMLHttpRequest();
xmlHttp.open("GET", "https://www.googleapis.com/drive/v2/files", false);
xmlHttp.setRequestHeader("Authorization", "Bearer " + result.access_token);
xmlHttp.send(null);
alert(xmlHttp.responseText);
}).fail(function (err) {
alert(err);
});;
}
您可以在 http://jsfiddle.net/JMTVz/41/ 找到。这使用了我的 oauth.io 客户端 ID,但您可以将其替换为您的,它应该也能正常工作。
您可以使用 OAuth Playground 做同样的事情。
见How do I authorise an app (web or installed) without user intervention? (canonical ?)
第 11 步会有所不同。不是将刷新令牌粘贴到您的服务器应用程序(您没有),而是将访问令牌粘贴到您的 JS 中,就像您在回答中所做的那样。