【发布时间】:2016-06-17 16:43:56
【问题描述】:
我正在使用 Google 服务帐户使用以下代码从服务端获取访问令牌。但我将访问令牌设为 Null。相同的返回令牌将用于在客户端为相同的 userEmailId 打开 Google 文件选择器。请提出我在代码中做错了什么。
private static final List SCOPE = Arrays.asList("https://www.googleapis.com/auth/drive");
public String getAccessToken(String SERVICE_ACCOUNT_EMAIL, String SERVICE_ACCOUNT_PKCS12_FILE_PATH,String userEmailId){
try {
HttpTransport httpTransport = new NetHttpTransport();
JsonFactory jsonFactory = new JacksonFactory();
GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
.setServiceAccountScopes(SCOPE)
.setServiceAccountUser(userEmailId)
.setServiceAccountPrivateKeyFromP12File(new java.io.File(SERVICE_ACCOUNT_PKCS12_FILE_PATH))
.build();
credential.getRefreshToken();
return credential.getAccessToken();
} catch (Exception e) {
// TODO: handle exception
log.severe("Error while getting Drive credentilas. 5.0"+ e.getMessage());
return null;
}
}
【问题讨论】:
-
不确定这里到底出了什么问题,但无论如何我强烈建议使用developers.google.com/identity/protocols/…。如果失败,请尝试在客户端库上提交问题。 github.com/google/google-api-java-client
-
@BillPrin:感谢您的评论,实际上我也在使用域范围的委派,但是在从服务器端模拟用户时,使用上面的代码获取访问令牌为 Null。
标签: java google-app-engine google-api google-oauth