現在、サービス アカウントとその P12 キーを使用して、単純な Gmail ユーザーの Imap サーバーに接続しようとしています。
http://code.google.com/p/java-gmail-imap/wiki/GmailAndXOAUTH2で説明されているように、ドメイン全体の委任サービス アカウントに正常に実装しました 。
ただし、昔ながらの Gmail アカウントに接続するのに問題があります。
OAuth 2.0 トークンを生成するコードは次のとおりです。
public static String getAccessToken(String email) throws Exception {
HttpTransport httpTransport = new NetHttpTransport();
JacksonFactory jsonFactory = new JacksonFactory();
GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.setServiceAccountId(SingleUserCredentials.SERVICE_ACCOUNT_EMAIL)
.setServiceAccountScopes("https://mail.google.com/")
.setServiceAccountPrivateKeyFromP12File(
new java.io.File(SingleUserCredentials.SERVICE_ACCOUNT_PKCS12_FILE_PATH))
.setServiceAccountUser(SingleUserCredentials.EMAIL)
.build();
credential.refreshToken();
return credential.getAccessToken();
}
次に、次のように ImapStore に接続しています。
String authToken = getAccessToken(SingleUserCredentials.EMAIL);
OAuth2Authenticator.initialize();
IMAPStore imapSslStore = OAuth2Authenticator.connectToImap(
"imap.gmail.com",
993,
SingleUserCredentials.EMAIL,
authToken,
true);
スレッド「メイン」 javax.mail.AuthenticationFailedException: [ALERT] Invalid credentials (Failure) で常に例外が発生します。
ここで少なくとも 2 つの点が奇妙です。
- OAuth 2.0 秘密鍵を使用した Imap は、Google Apps ドメインのドメイン全体の委任に対して正常に機能します。
- シンプルな gmail アカウントに使用している証明書は、そのユーザーの GDrive やその他の Google サービスで完全に機能します。