2

現在、サービス アカウントとその 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 つの点が奇妙です。

  1. OAuth 2.0 秘密鍵を使用した Imap は、Google Apps ドメインのドメイン全体の委任に対して正常に機能します。
  2. シンプルな gmail アカウントに使用している証明書は、そのユーザーの GDrive やその他の Google サービスで完全に機能します。
4

0 に答える 0