Используйте служебную учетную запись для аутентификации OAuth2 в gmail - PullRequest
0 голосов
/ 12 марта 2020

Мне нужно реализовать аутентификацию OAuth2 в моем приложении для Gmail. Приложение работает в фоновом режиме без пользовательского интерфейса. Так что у меня есть аккаунт Google (я думаю, что это не GSuite). Я создал служебную учетную запись, следуя приведенным ниже инструкциям: https://www.emailarchitect.net/easendmail/sdk/html/object_oauth_service_account.htm (но без назначения продукта - у меня не было возможности для этого. Возможно, это связано с тем, что моя учетная запись не GSuite? ..). После этого я создал ключ с файлом JSON для аутентификации JWT. Я использую библиотеку google-auth-library-oauth2-http для генерации access_token и использую ее для входа в почтовый ящик gmail. Вот фрагмент кода для генерации токена:

GoogleCredentials credentials = ServiceAccountCredentials.fromStream(new FileInputStream("path_to_json")
                                     .createScoped(Arrays.asList("https://mail.google.com"));
credentials.refreshIfExpired();
AccessToken accessToken = credentials.getAccessToken();

AccessToken успешно получен, но когда я пытаюсь использовать это для аутентификации почтового ящика, я получаю javax.mail.AuthenticationFailedException: [AUTHENTICATIONFAILED] Invalid credentials (Failure).

Вот код фрагмент для подключения к почтовому ящику:

Properties props = new Properties();
props.put("mail.imap.ssl.enable", "true");
props.put("mail.imap.auth.mechanisms", "XOAUTH2");
Session session = Session.getInstance(props);
Store store = session.getStore("imap");
store.connect("imap.gmail.com", "my_acc@gmail.com", access_token);

Вопрос в том, можно ли пройти аутентификацию в почтовом ящике Gmail с токеном доступа через JWT, созданный на основе данных учетной записи службы? Это вообще возможно?

1 Ответ

1 голос
/ 13 марта 2020

Вы можете создать служебную учетную запись без G Suite, но вам нужно использовать «делегирование по всему домену», если вы хотите получить доступ к почтовому ящику пользователя Gmail. Как вы можете прочитать в документации :

В корпоративных приложениях вам может потребоваться программный доступ к данным пользователя без какой-либо ручной авторизации с их стороны. В доменах G Suite администратор домена может предоставлять сторонним приложениям доступ к данным своих пользователей по всему домену - это называется делегированием полномочий по всему домену. Чтобы делегировать полномочия таким способом, администраторы домена могут использовать служебные учетные записи с OAuth 2.0.

...