OAuth клиент для Java: обзор библиотек и примеры кода

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

OAuth клиент для Java: как выбрать и использовать

OAuth (Open Authorization) — это открытый протокол, который позволяет предоставить третьей стороне (например, вашему Java-приложению) ограниченный доступ к ресурсам пользователя без передачи его логина и пароля. В современной веб-разработке OAuth 2.0 является стандартом де-факто для авторизации через социальные сети (Google, Facebook, VK) и корпоративные системы (Microsoft, GitHub).

Для Java существует несколько зрелых библиотек, реализующих как роль клиента OAuth, так и сервера. В этой статье мы рассмотрим три наиболее популярных решения: ScribeJava, Spring Security OAuth и Google OAuth Client Library for Java. Вы узнаете, как подключить их в проект, написать базовую интеграцию и выбрать подходящий инструмент под свои задачи.

1. ScribeJava — легковесный OAuth клиент

ScribeJava — это простая и легковесная библиотека, которая поддерживает OAuth 1.0a и OAuth 2.0. Она идеально подходит для standalone-приложений или микросервисов, где не требуется полный стек Spring.

Подключение (Maven)

<dependency>
    <groupId>com.github.scribejava</groupId>
    <artifactId>scribejava-apis</artifactId>
    <version>8.3.3</version>
</dependency>

Пример: вход через Google

import com.github.scribejava.apis.GoogleApi20;
import com.github.scribejava.core.builder.ServiceBuilder;
import com.github.scribejava.core.model.*;
import com.github.scribejava.core.oauth.OAuth20Service;

public class GoogleOAuthExample {
    public static void main(String[] args) throws Exception {
        String clientId = "ВАШ_CLIENT_ID";
        String clientSecret = "ВАШ_CLIENT_SECRET";
        String callbackUrl = "http://localhost:8080/callback";

        OAuth20Service service = new ServiceBuilder(clientId)
                .apiSecret(clientSecret)
                .callback(callbackUrl)
                .scope("email profile")
                .build(GoogleApi20.instance());

        // Получаем URL для редиректа пользователя
        String authorizationUrl = service.getAuthorizationUrl();
        System.out.println("Откройте в браузере: " + authorizationUrl);

        // После редиректа получаем код авторизации (в реальном приложении из QueryString)
        String code = "КОД_ИЗ_РЕДИРЕКТА";

        // Обмениваем код на токен
        OAuth2AccessToken accessToken = service.getAccessToken(code);
        System.out.println("Access Token: " + accessToken.getAccessToken());

        // Используем токен для запроса данных пользователя
        OAuthRequest request = new OAuthRequest(Verb.GET, "https://www.googleapis.com/oauth2/v2/userinfo");
        service.signRequest(accessToken, request);
        Response response = service.execute(request);
        System.out.println("Ответ API: " + response.getBody());
    }
}

Преимущества ScribeJava:

  • Минимум зависимостей (только OkHttp или URLConnection).
  • Поддержка десятков провайдеров из коробки (Google, Facebook, GitHub, VK и др.).
  • Простой API без навороченных абстракций.

2. Spring Security OAuth — для проектов на Spring Boot

Если вы используете Spring Boot, то Spring Security OAuth (модуль spring-security-oauth2-client) является самым естественным выбором. Он полностью интегрируется с Security-цепочкой и позволяет настраивать провайдеров через application.yml.

Подключение (Gradle)

implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'

Пример конфигурации (application.yml)

spring:
  security:
    oauth2:
      client:
        registration:
          google:
            client-id: ВАШ_CLIENT_ID
            client-secret: ВАШ_CLIENT_SECRET
            scope: profile, email
          github:
            client-id: ВАШ_CLIENT_ID
            client-secret: ВАШ_CLIENT_SECRET

Пример контроллера для получения данных пользователя

import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.oauth2.core.user.OAuth2User;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @GetMapping("/user")
    public String user(@AuthenticationPrincipal OAuth2User principal) {
        if (principal == null) {
            return "Не авторизован";
        }
        return "Привет, " + principal.getAttribute("name");
    }
}

Преимущества Spring Security OAuth:

  • Полная интеграция с Spring Boot и Security.
  • Автоматическая обработка редиректов, состояний (state) и CSRF.
  • Поддержка OpenID Connect (OIDC) для получения ID Token.

3. Google OAuth Client Library for Java

Эта библиотека от Google специализируется на взаимодействии

Рекомендаций