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

两条腿的oauth2:如何在没有特定API库的情况下调用google drive rest API

史淇
2023-03-14
import com.google.api.client.auth.oauth2.ClientCredentialsTokenRequest;
import com.google.api.client.auth.oauth2.ClientParametersAuthentication;
import com.google.api.client.auth.oauth2.TokenResponse;
...
public void oauth2Test() {
   String clientId = "...";
   String clientSecret = "...";
   ClientCredentialsTokenRequest request = new ClientCredentialsTokenRequest(
         new NetHttpTransport(),
         new JacksonFactory(),
         new GenericUrl("https://accounts.google.com/o/oauth2/auth"));
   request.setClientAuthentication(new ClientParametersAuthentication(clientId, clientSecret));
   TokenResponse response;
   try {
      response = request.execute();      
   } catch (Exception ex) {
      ex.printStackTrace();
   }
}
InputStream is = getClass().getResourceAsStream("JSONCredFile");
GoogleCredential credential = GoogleCredential.fromStream(is).createScoped(scopes);
Drive service = new Drive.Builder(new NetHttpTransport(), new JacksonFactory(), credential)
        .setApplicationName("My app")
        .build();
FileList result = service.files().list().setPageSize(10)
        .setFields("nextPageToken, files(id, name)")
        .execute();
POST /token HTTP/1.1
Accept-Encoding: gzip
User-Agent: Google-HTTP-Java-Client/1.23.0 (gzip)
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Host: oauth2.googleapis.com
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Content-Length: 771

grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&assertion=<lots of encoded stuff>
GET /drive/v3/files?fields=nextPageToken,%20files(id,%20name)&pageSize=10 HTTP/1.1
Accept-Encoding: gzip
Authorization: Bearer ya29.c.Eln_BSgrx0afa85mdMstW5jzEvM5dotWpctSXl-DE1jeO2mmu1h0FErr_EZO05YnC-B1yz30IBwOyFXoWr_wwKxlZk08R6eZldNU-EAfrQ1yNftymn_Qqc_pfg

有更好的主意吗?

共有1个答案

西门淮晨
2023-03-14

Google不支持grant_type=client_credentials,这就是使用OAuth客户机ID和secret来执行2LO的方式。

 类似资料:
  • 问题内容: 我正试图从这样打电话: 该代码可以正常编译,但是会失败。我不知道为什么我无法得到。有人可以帮我吗? 问题答案: 是输入输出参数。进行呼叫时,必须将其设置为缓冲区()的大小。它的类型也是,所以在Go中使用。Windows 类型是指向的指针(具有)。参见来源。 还返回3个值: 存储返回并打印。完成此操作后,您会更早发现错误: 印刷品: 这意味着更多的数据比什么适合入缓冲区您传递可用- 或者

  • 双腿OAuth2用于基于浏览器的应用程序,在这种应用程序中,任何客户端凭据都不能对公众隐藏。“Web服务器应用程序”使用三条腿的OAuth2,其中服务器之间有第三个呼叫。这里描述得很好。 问题是:既然两条腿看起来很好,为什么还要用三条腿呢? 这对提供者和客户来说都是更多的工作。为什么其中一个大咖不出手,去掉3条腿?

  • 我正在玩grpc 有人成功使用进行生产吗?我们需要包括特使在内的所有依赖项吗?

  • 我正在开发一个服务器端应用程序,即RESTAPI。用户可以通过这个API将自己手工制作的客户端的数据发布到我们自己的系统中。当然,我会记录数据的格式。但我的问题是,使用OAuth2实现身份验证是明智之举,还是我最好只使用SSL基本身份验证路由?若然,原因为何?我在谷歌上搜索了大量关于OAuth2的帖子和指南,如果不是他们正在处理的客户端,那就是Spring Security组合,我发现它很难遵循,

  • 问题内容: 我在整个应用程序中都使用spring 。现在,我也想为一个没有的创建一个。那有可能吗? 问题答案: JPA要求每个实体都有一个ID。因此,不可以,没有ID的实体是不允许的。 每个JPA实体都必须有一个主键。 从JPA规范 您可能想从这里阅读更多有关JPA如何处理数据库端没有ID的情况的信息(请参阅“无主键”)。

  • 我们有一个应用程序,将部署在具有不同IP的服务器上。JNLP是在构建时生成的。因此,我们定义了没有代码库的JNLP: 然而,当第二次启动这个应用程序时(从第一次启动时创建的桌面图标),代码库被设置为本地文件系统,这是绝对无用的。我希望Java Webstart在第一次启动应用程序时使用实际的源地址设置代码库。这似乎不是真的。 我如何准备一个通用的JNLP,它可以在不同的服务器上使用而无需修改?