当前位置: 首页 > 知识库问答 >
问题:

不带OAuth2访问Google Drive

仇迪
2023-03-14

我已经翻遍了谷歌关于GoogleDrive SDK和Drive API的所有文档,但我无法找到是否有一种方法可以在不使用oauth2的情况下连接到特定的GoogleDrive。

这与Mashery以及Twilio所允许的许多API的功能相似。只有API密钥,然后您可以访问。

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

共有1个答案

袁弘化
2023-03-14

Google API实际上只通过使用承载令牌的oauth2.0工作。

但是您可以从GCP服务帐户的JWT令牌中获得承载令牌。由于通过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]
 类似资料:
  • 我用Spring Security和OAuth2保护了我的Spring REST API,我可以成功地检索令牌并访问我的API。我的应用程序自定义了OAuth2客户端。 当我添加第二个antmatcher/anonymous时,它就无法工作,而且它也没有真正表达我的意图--例如,我不想对GETs进行匿名访问,而是在POSTs上进行身份验证(使用很容易做到)。 如何使OAuth2身份验证可选?

  • 我试图创建spring rest服务,它是由我自己的oauth2资源服务器自动引诱的。我创建了资源服务器: {“error”:“server_error”,“error_description”:“java.io.NotSerializableException:org.springframework.security.crypto.bcrypt.bcryptPasswordenCoder”} 在

  • 我对spring security&oauth2相当陌生。作为学习的一部分,我试图设置一个OAuth2授权服务器,并保护RESTendpoint免受未经授权的访问。 代码 资源服务器 ProductController.java 未经授权API可以正常工作 如果我们只使用权限(@preauthorize(“hasauthorize('...')”))进行授权,它可以正常工作 作用域在到达oauth

  • 我得到的令牌是: http://localhost:8080/servicesmem/oauth/token?username=myuser&password=mypassword&grant_type=password&scope=read,write,trust 我得到: 我得到: 我使用头:Authorization Bearer ACCESS_TOKEN,但我得到了同样的错误。我错过了什么

  • 我有一些问题,当我想要获得“访问令牌”,我使用Spring Security在我的项目 WebSecurity配置 我在内存中设置了user以便在该类中进行身份验证,并且我使用的是内存令牌 我正确地发送了grant_type,client_id,client_secret,username和password,但没有在API上响应“访问令牌

  • 我感到困惑的是,在向授权服务器发送授权请求时,似乎没有标准的方法来指定访问令牌的受众。 OAuth2将访问令牌指定为不透明字符串;规范中只有一处提到了“观众”,即访问令牌可以是“观众限制的”。许多最近的授权服务器实现似乎产生了JWT访问令牌,JWT指定了受众(aud)声明。 据我所知:-Auth0使用“audience”参数-Connect2id使用“resource”参数-Identity Se