我尝试在Java应用程序中使用带有PicasaService的OAuth2身份验证。
Maven依赖项:
<dependency>
<groupId>com.google.gdata</groupId>
<artifactId>core</artifactId>
<version>${version.gdata}</version>
</dependency>
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-oauth2</artifactId>
<version>${version.google-api-services-oauth2}</version>
</dependency>
版本:
<version.gdata>1.47.1</version.gdata>
<version.google-api-services-oauth2>v2-rev93-1.20.0</version.google-api-services-oauth2>
我使用相册所有者帐户登录开发者控制台并创建了一个服务帐户并下载了p12密钥文件。
我尝试使用服务帐户进行身份验证:
GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId("XXX@developer.gserviceaccount.com")
.setServiceAccountPrivateKeyFromP12File(new File("privatekey.p12"))
.setServiceAccountScopes(Collections.singleton("https://picasaweb.google.com/data"))
.build();
credential.refreshToken();
它工作正常,验证正常,并且检索了访问令牌。
我可以使用https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=TOKEN
检查检索到的令牌{
issued_to: "XXX",
audience: "XXX",
scope: "https://picasaweb.google.com/data",
expires_in: 3542,
access_type: "offline"
}
PicasaService正在使用经过身份验证的GoogleCredentials:
PicasaService picasaService = new PicasaService("appname-from-developers-console");
picasaService.setOAuth2Credentials(credential);
服务API调用返回时没有错误,但返回的数据仅包含公开可用的数据,因此它类似于未经授权的访问。
如果我将 setServiceAccountUser()调用添加到GoogleCredential构建器,其中参数值是Picasa帐户的登录名,则 refreshToken()会抛出< strong> TokenResponseException 表示通话未经授权(401),因此服务帐户无法访问此Picasa帐户,但Picasa帐户已创建服务帐户。
在我可以选择使用哪些API的开发者控制台上,除了Google Picker API之外,没有与上传的照片有任何关系的Picasa / Photo:&#34; Google Picker API使用户可以选择存储在Google服务器中的照片,视频,地图和文档。&#34;但它没有帮助。
我的问题是如何授权服务帐户访问私人数据或我的代码出错?