gpt4 book ai didi

java - 使用类路径中的 .p12 文件作为 GoogleCredential

转载 作者:搜寻专家 更新时间:2023-11-01 02:23:29 25 4
gpt4 key购买 nike

我正在制作一个 java 命令行应用程序,该应用程序打包在一个使用 Google 的一些 API 的 JAR 文件中。

我需要从私钥“Credentials.p12”设置 GoogleCredential 对象。

GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.setServiceAccountId("xxxxx@developer.gserviceaccount.com")
.setServiceAccountScopes(Arrays.asList(DirectoryScopes.ADMIN_DIRECTORY_GROUP, DirectoryScopes.ADMIN_DIRECTORY_USER, DirectoryScopes.ADMIN_DIRECTORY_ORGUNIT))
.setServiceAccountUser(emailAccount)
//THE CODE BELOW IS IMPORTANT: I need to change this
.setServiceAccountPrivateKeyFromP12File(new File("Credentials.p12"))
.build();

directory = new Directory.Builder(httpTransport, jsonFactory, credential)
.setApplicationName("My Cmd App")
.build();

现在我能够让它工作,但文件“Credentials.p12”位于打包的 JAR 文件之外。

如何使用 JAR 中的 p12 文件使其工作?

从这里documentation ,我认为我可以使用的唯一其他选择是使用 PrivateKey 对象的方法变体。我正在考虑使用 InputStream 从类路径中获取 p12 文件:

InputStream is = this.getClass().getResourceAsStream("Credentials.p12");

我完全不知道该怎么做。

在回答之前,请确保您有使用 Google OAuth2 库的经验。拜托,没有像将资源复制到临时文件这样的技巧:Credential.p12 的单数版本应该保留在 JAR 中是有原因的。

最佳答案

在深入研究 GoogleCredential.Builder 类源代码后,我发现了以下内容:

  • Google 开发人员生成的 p12 文件的密码控制台始终是 "notasecret" 以及别名的密码
  • 私钥的别名总是"privatekey"

使用以下代码从资源 InputStream 构建私钥:

KeyStore keystore = KeyStore.getInstance("PKCS12");
keystore.load(this.getClass().getClassLoader().getResourceAsStream("Credentials.p12"), "notasecret".toCharArray());
PrivateKey pk = (PrivateKey)keystore.getKey("privatekey", "notasecret".toCharArray());

我能够将私钥加载到 GoogleCredential Builder 中:

GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.setServiceAccountId("xxxxxx@developer.gserviceaccount.com")
.setServiceAccountScopes(Arrays.asList(DirectoryScopes.ADMIN_DIRECTORY_GROUP, DirectoryScopes.ADMIN_DIRECTORY_USER, DirectoryScopes.ADMIN_DIRECTORY_ORGUNIT))
.setServiceAccountUser(emailAccount)
.setServiceAccountPrivateKey(pk) //<----THIS
.build();

关于java - 使用类路径中的 .p12 文件作为 GoogleCredential,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32365546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com