无需OAuth2即可访问Google云端硬盘

时间:2014-05-09 00:55:26

标签: oauth-2.0 google-drive-api google-oauth

我一直在浏览GoogleDrive SDK和Drive API上的所有Google文档,但是我无法确定是否有办法连接到特定的GoogleDrive而无需使用OAuth2。

我意识到OAuth2允许服务器或客户端能够安全地连接到相关的特定Google云端硬盘。但是,我想知道是否有办法简单地为Google云端硬盘实例添加API密钥,只需通过它,访问我的文件和文件夹。事实上,我有一种方法可以通过OAuth2连接到用户的Google云端硬盘,但我想只通过这种方式连接到我的手机,以便自动将统计数据推送到我自己的Google云端硬盘上。由于它是自动化的,我不想填写凭证表单并单击“接受”以及所有这些,当然我意识到在那之后我将能够拥有刷新令牌。但是如果可能的话,我真的想避免这一切。

这与Mashery允许的大部分API以及Twilio类似。只有API密钥,然后您才能访问。

我真的只需知道这是否有可能,所以我可以继续追求或离开它并尝试不同的东西。

3 个答案:

答案 0 :(得分:2)

通过使用bearer令牌的OAuth2.0,Google API确实可以only工作。

但是您可以从GCP服务帐户的JWT令牌中获得bearer令牌。由于通过JWT进行的OAuth是自动的,因此无需用户交互。

只需创建一个服务帐户,生成JSON格式的密钥,然后与该服务帐户(xxxxx@yyyyy.iam.gserviceaccount.com“共享”您的云端硬盘文件夹。

注意:服务帐户的密钥文件看起来像这样(已编辑)

{
    "type": "service_account",
    "project_id": "<skip>",
    "private_key_id": "<skip>",
    "private_key": "-----BEGIN PRIVATE KEY-----\n <skip> \n-----END PRIVATE KEY-----\n",
    "client_email": "<skip>@<skip>.iam.gserviceaccount.com",
    "client_id": "<skip>",
    "auth_uri": "https://accounts.google.com/o/oauth2/auth",
    "token_uri": "https://oauth2.googleapis.com/token",
    "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
    "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/<skip>%40<skip>.iam.gserviceaccount.com"
}

在Go中列出文件的示例:

package main

import (
    "fmt"
    "log"

    "golang.org/x/net/context"
    "google.golang.org/api/drive/v3"
    "google.golang.org/api/option"
)

func main() {
    srv, err := drive.NewService(context.Background(), option.WithCredentialsFile("key.json"))
    if err != nil {
        log.Fatal("Unable to access Drive API:", err)
    }
    r, err := srv.Files.List().PageSize(100).Fields("nextPageToken, files").Do()
    if err != nil {
        log.Fatal("Unable to list files:", err)
    }
    fmt.Println("Files:")
    for _, i := range r.Files {
        fmt.Printf("%v (%v) %v %v\n", i.Name, i.Id, i.MimeType, i.Parents)
    }
}

输出:

Files:
Test (1TMx<skip>SoYJ5) application/vnd.google-apps.folder []
Test.txt (1Ele<skip>Fh98n) text/plain [1TMx<skip>SoYJ5]
Test2.txt (3ce9x<skip>lsWds) text/plain [1TMx<skip>SoYJ5]

答案 1 :(得分:0)

嗯,Oauth 2.0支持Resource Owner Password Credentials GrantClient Credentials Grant

  

资源所有者密码凭据授予类型适用于资源所有者与客户端具有信任关系的情况,例如设备操作系统或高权限应用程序。

     

当客户端请求访问受其控制的受保护资源时,客户端可以仅使用其客户端凭据(或其他受支持的身份验证方法)请求访问令牌,或者先前已安排使用其他资源所有者的访问令牌。授权服务器(其方法超出了本规范的范围)。

客户端凭据流似乎非常适合您。但不幸的是,谷歌不支持这两项拨款。

答案 2 :(得分:0)

“如果有办法连接到特定的GoogleDrive而无需使用OAuth2。”

没有。 Oauth2是支持的唯一授权/身份验证机制。

如果您的问题确实是“如果有办法连接到特定的GoogleDrive而无需编写OAuth2代码。”,那么这个答案可能会有所帮助How do I authorise an app (web or installed) without user intervention? (canonical ?)

“只有API密钥才可以访问”。听起来有点像Google服务帐户,但这会为应用创建一个伪驱动器帐户,而不是允许该应用访问您的常规云端硬盘帐户。