Мне нужно реализовать аутентификацию 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, созданный на основе данных учетной записи службы? Это вообще возможно?