使用,我试图对一个服务帐户进行身份验证,该帐户镜像示例代码http://samples.google-api-java-client.googlecode.com/hg/storage-serviceaccount-cmdline-sample/src/main/java/com/google/api/services/samples/storage/serviceaccount/cmdline/StorageServiceAccountSample.java中概述的过程,以便使用Blogger。我已经创建了服务帐户,并下载了API仪表板提供的.p12文件。这个.p12文件作为一个资源存储在jar文件中,其中包含用于连接到Blogger服务的代码。在GoogleCredentials.Builder对象上运行GoogleCredentials.Builder时,我会遇到一个带有消息的IOException,该消息简单地表示“it”不能显示数据。下面是所讨论的代码片段(删除了文件名)和堆栈跟踪块,我认为这是相关的。关于这一例外的原因,我有点不知所措。使用openssl,我能够隔离地验证p12文件。
代码
httpTransport = GoogleNetHttpTransport.newTrustedTransport();
File p12File = File.createTempFile("filename", ".p12");
FileOutputStream p12FileOutputStream = new FileOutputStream(p12File);
IOUtils.copy(getClass().getResourceAsStream("/ACCESS-KEYS/filename.p12"), p12FileOutputStream);
p12FileOutputStream.close();
credential = new GoogleCredential.Builder().setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
.setServiceAccountScopes(Collections.singleton(BloggerScopes.BLOGGER))
.setServiceAccountPrivateKeyFromP12File(p12File)
.build();堆栈跟踪
java.io.IOException: Could not decrypt data.
at com.rsa.cryptoj.o.gx.b(Unknown Source)
at com.rsa.cryptoj.o.gx.a(Unknown Source)
at com.rsa.cryptoj.o.gx.a(Unknown Source)
at com.rsa.cryptoj.o.gx.a(Unknown Source)
at com.rsa.cryptoj.o.gx.a(Unknown Source)
at com.rsa.cryptoj.o.gx.engineLoad(Unknown Source)
at java.security.KeyStore.load(KeyStore.java:1183)
at com.google.api.client.util.SecurityUtils.loadKeyStore(SecurityUtils.java:77)
at com.google.api.client.util.SecurityUtils.loadPrivateKeyFromKeyStore(SecurityUtils.java:110)
at com.google.api.client.googleapis.auth.oauth2.GoogleCredential$Builder.setServiceAccountPrivateKeyFromP12File(GoogleCredential.java:503)发布于 2015-08-27 22:59:11
根据上面user1516873提供的响应在这里发布最后的代码。注意,这个问题与原始问题之间的相关差异是第3行,其中"SunJSSE“是显式设置的。
httpTransport = GoogleNetHttpTransport.newTrustedTransport();
KeyStore keyStore = KeyStore.getInstance("PKCS12", "SunJSSE");
keyStore.load(getClass().getResourceAsStream("/ACCESS-KEYS/filename.p12"), "notasecret".toCharArray());
PrivateKey key = (PrivateKey) keyStore.getKey("privatekey", "notasecret".toCharArray());
credential = new GoogleCredential.Builder().setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
.setServiceAccountScopes(Collections.singleton(BloggerScopes.BLOGGER))
.setServiceAccountPrivateKey(key)
.build();https://stackoverflow.com/questions/24215145
复制相似问题