java – 使用类路径中的.p12文件进行GoogleCredential
作者:互联网
我正在制作一个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”以及别名的密码
>私钥的别名始终是“私钥”
使用以下代码从资源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,private-key,google-oauth2 来源: https://codeday.me/bug/20190609/1203347.html