OAuth2 и OpenID Connect

Angular-приложения часто взаимодействуют с внешними сервисами, требующими безопасной аутентификации. OAuth2 и OpenID Connect (OIDC) предоставляют стандартизованные протоколы для авторизации и аутентификации.

Основные понятия

  • OAuth2 Протокол авторизации, позволяющий приложению получать доступ к ресурсам пользователя без передачи пароля. Основные гранты:

    • Authorization Code
    • Implicit (устаревающий для SPAs)
    • Client Credentials
    • Resource Owner Password Credentials
  • OpenID Connect Расширение OAuth2, добавляющее слой аутентификации. Позволяет получать информацию о пользователе через ID Token в формате JWT.

Интеграция в Angular

  1. Установка библиотек Для работы с OAuth2/OIDC в Angular часто используют @azure/msal-angular, angular-oauth2-oidc или oidc-client.

  2. Настройка конфигурации

    export const authConfig: AuthConfig = {
      issuer: 'https://example.com',
      redirectUri: window.location.origin,
      clientId: 'angular-app-client-id',
      responseType: 'code',
      scope: 'openid profile email api.read',
      showDebugInformation: true
    };
  3. Добавление охраняемых маршрутов (guards) Используется AuthGuard для предотвращения доступа неаутентифицированных пользователей.

    { path: 'dashboard', component: DashboardComponent, canActivate: [AuthGuard] }
  4. Получение токенов и взаимодействие с API После успешного входа приложение получает access token и id token, которые можно использовать для аутентификации запросов к API.

    this.oauthService.loadDiscoveryDocumentAndTryLogin().then(() => {
      const token = this.oauthService.getAccessToken();
      this.apiService.getData(token).subscribe();
    });
  5. Обновление токенов (silent refresh) Для поддержания сессии без повторного входа используется автоматическое обновление токенов через refresh_token или iframe-перезапрос.

Безопасность

  • Хранение токенов Рекомендуется использовать sessionStorage или memory storage, чтобы минимизировать риски XSS.
  • CORS и политика безопасного взаимодействия Сервер должен разрешать запросы с домена приложения, иначе авторизация и получение токенов будут заблокированы.
  • Проверка ID Token Необходимо проверять подпись JWT и срок действия токена, чтобы исключить подделку.

Практические советы

  • Для SPA предпочтителен Authorization Code Flow с PKCE, так как он обеспечивает безопасное получение токенов без клиентского секрета.
  • Важно логировать ошибки аутентификации для отладки и анализа проблем с OAuth2/OIDC.
  • Интеграция с Angular Router и Guards позволяет реализовать плавное и безопасное управление доступом к ресурсам приложения.