ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 使用类路径中的.p12文件进行GoogleCredential

2019-06-09 06:49:39  阅读:388  来源: 互联网

标签:java private-key google-oauth2


我正在制作一个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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有