Oauth 2.0 不使用OAuth2访问Google驱动器

Oauth 2.0 不使用OAuth2访问Google驱动器,oauth-2.0,google-drive-api,google-oauth,Oauth 2.0,Google Drive Api,Google Oauth,我已经翻阅了所有关于GoogleDrive SDK和驱动器API的Google文档,但是我不知道是否有一种方法可以在不使用OAuth2的情况下连接到特定的GoogleDrive 我意识到OAuth2允许服务器或客户端能够安全地连接到特定的Google驱动器。但是,我想知道是否有一种方法可以简单地为GoogleDrive实例提供一个API密钥,并通过它访问我的文件和文件夹。事实上,我已经有一种方法可以通过OAuth2连接到用户的Google Drive,但我只想通过这种方式连接到我的,以便自动将统

我已经翻阅了所有关于GoogleDrive SDK和驱动器API的Google文档,但是我不知道是否有一种方法可以在不使用OAuth2的情况下连接到特定的GoogleDrive

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

这与Mashery允许的许多API以及Twilio的功能类似。只有API密钥才能访问

我真的只需要知道这是否可能,这样我就可以继续追求,或者放弃追求,尝试不同的东西。

好吧,Oauth 2.0支持和

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

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

客户端凭据流似乎非常适合您。但不幸的是,Google不支持这两项授权。

“如果有一种方法可以连接到特定的GoogleDrive而不必使用OAuth2。”

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

如果您的问题是“如果有一种方法可以连接到特定的GoogleDrive而不必编写OAuth2代码”,那么这个答案可能会有所帮助

“只有API密钥,然后你才能访问。”听起来有点像谷歌服务帐户,但这将为应用程序创建一个伪驱动器帐户,而不是允许应用程序访问你的常规驱动器帐户。

谷歌API确实通过OAuth2.0使用
承载
令牌工作

但是您可以从GCP服务帐户的JWT令牌获得
承载
令牌。由于通过JWT的OAuth是自动的,因此不涉及用户交互

只需创建一个服务帐户,生成一个JSON格式的密钥,并与该服务帐户“共享”驱动器文件夹(
xxxxx@yyyyy.iam.gserviceaccount.com

注意:服务帐户的密钥文件如下所示(已编辑):

输出:

文件:
测试(1TMxSoYJ5)应用程序/vnd.google-apps.folder[]
Test.txt(1EleFh98n)文本/纯文本[1TMxSoYJ5]
Test2.txt(3ce9xlsWds)文本/纯文本[1TMxSoYJ5]

请仅对
代码使用
代码格式
。它不用于引用(由
完成)或强调。oauth2支持这些授予类型,但"我发现goolge的令牌提供程序不支持客户端凭据授权,但这可能会起作用。我认为服务帐户对我来说可能是一个很好的解决方案。api_key和client_id呢?你不能只使用它们吗?我没有关于这方面的好信息。你如何使用node.js做到这一点?我有一个服务帐户,我有key.json,但我没有“我不知道如何将它放在驱动器对象中,API引用中根本没有提到它。如果您没有特别使用node.js,您能将我链接到您的go引用的位置吗?”?
{
    "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"
}
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)
    }
}