无法提取访问令牌 google 服务帐户
Not able to extract access token google service account
我有一个消费者 google 表格的帐户
"me@gmail.com" 我有一个表单的服务帐户
"Something@developer.gserviceaccount.com"。我正在尝试使用为此服务帐户生成的私钥生成访问令牌,然后可以编辑或查看与 "me@gmail.com" 关联的日历。
验证码:
String emailAddress = "something@developer.gserviceaccount.com";
JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
File file = new File("path to .p12 file");
HttpTransport httpTransport = GoogleNetHttpTransport
.newTrustedTransport();
GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId(emailAddress)
.setServiceAccountPrivateKeyFromP12File(file)
.setServiceAccountScopes(
Collections.singleton("https://www.googleapis.com/auth/calendar"))
.setServiceAccountUser("me@gmail.com")
.build();
String accessToken = credential.getAccessToken();
但是生成的访问令牌为空。服务帐户具有编辑权限。该程序能够访问 .p12 文件。
关于我哪里出错的任何提示?
我怀疑您在使用服务帐户时是否获得了访问令牌。如果您正在使用 OAuth2 dance 并提示用户获得权限,那么可以获取访问令牌等。这是从 Google 凭据对象初始化 API 日历实例的正确方法:
import com.google.api.services.calendar.Calendar;
Calendar service = new Calendar.Builder(httpTransport, jsonFactory, null)
.setHttpRequestInitializer(credential).build();
然后您可以使用日历实例进行 API 调用。更多信息可以在这里找到:
https://developers.google.com/admin-sdk/directory/v1/guides/delegation
https://developers.google.com/google-apps/calendar/quickstart/java
我认为您误解了服务帐户的工作原理。模拟用户只能在 Google Apps 域中使用。您不能使用服务帐户来冒充 Gmail 帐户。
我有一个消费者 google 表格的帐户 "me@gmail.com" 我有一个表单的服务帐户 "Something@developer.gserviceaccount.com"。我正在尝试使用为此服务帐户生成的私钥生成访问令牌,然后可以编辑或查看与 "me@gmail.com" 关联的日历。 验证码:
String emailAddress = "something@developer.gserviceaccount.com";
JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
File file = new File("path to .p12 file");
HttpTransport httpTransport = GoogleNetHttpTransport
.newTrustedTransport();
GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId(emailAddress)
.setServiceAccountPrivateKeyFromP12File(file)
.setServiceAccountScopes(
Collections.singleton("https://www.googleapis.com/auth/calendar"))
.setServiceAccountUser("me@gmail.com")
.build();
String accessToken = credential.getAccessToken();
但是生成的访问令牌为空。服务帐户具有编辑权限。该程序能够访问 .p12 文件。 关于我哪里出错的任何提示?
我怀疑您在使用服务帐户时是否获得了访问令牌。如果您正在使用 OAuth2 dance 并提示用户获得权限,那么可以获取访问令牌等。这是从 Google 凭据对象初始化 API 日历实例的正确方法:
import com.google.api.services.calendar.Calendar;
Calendar service = new Calendar.Builder(httpTransport, jsonFactory, null)
.setHttpRequestInitializer(credential).build();
然后您可以使用日历实例进行 API 调用。更多信息可以在这里找到: https://developers.google.com/admin-sdk/directory/v1/guides/delegation https://developers.google.com/google-apps/calendar/quickstart/java
我认为您误解了服务帐户的工作原理。模拟用户只能在 Google Apps 域中使用。您不能使用服务帐户来冒充 Gmail 帐户。