Пакет authhandler (Three-Legged OAuth 2.0)

Пакет authhandler реализует TokenSource для поддержки “трехногового OAuth 2.0” через кастомный AuthorizationHandler.

Функции

func TokenSource

func TokenSource(
    ctx context.Context, 
    config *oauth2.Config, 
    state string, 
    authHandler AuthorizationHandler,
) oauth2.TokenSource

TokenSource возвращает oauth2.TokenSource, который получает access-токены, используя трехноговый OAuth-поток.

Параметры:

  • ctx - контекст для операции Exchange
  • config - полная конфигурация OAuth (AuthURL, TokenURL, Scope)
  • state - уникальная строка состояния для защиты от CSRF
  • authHandler - обработчик авторизации для получения согласия пользователя

Особенности:

  • Проверяет соответствие параметра state в запросе и ответе
  • Обменивает auth-код на OAuth-токен после проверки

func TokenSourceWithPKCE

func TokenSourceWithPKCE(
    ctx context.Context,
    config *oauth2.Config,
    state string,
    authHandler AuthorizationHandler, 
    pkce *PKCEParams,
) oauth2.TokenSource

TokenSourceWithPKCE - расширенная версия с поддержкой PKCE (Proof Key for Code Exchange).

Дополнительный параметр:

  • pkce - параметры для защиты от CSRF через code challenge и code verifier

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

Типы

type AuthorizationHandler

type AuthorizationHandler func(authCodeURL string) (code string, state string, err error)

AuthorizationHandler - обработчик для трехногового OAuth, который:

  1. Перенаправляет пользователя по URL для получения согласия
  2. Возвращает auth-код и состояние после подтверждения

type PKCEParams

type PKCEParams struct {
    Challenge       string // Зашифрованный code verifier (base64-url)
    ChallengeMethod string // Метод шифрования (напр. S256)
    Verifier        string // Оригинальный секрет (незашифрованный)
}

PKCEParams содержит параметры для защиты потока PKCE.

Особенности реализации

  1. Безопасность:

    • Обязательная проверка параметра state
    • Поддержка современных методов защиты PKCE
  2. Гибкость:

    • Возможность кастомной обработки авторизации
    • Поддержка различных методов шифрования PKCE
  3. Рекомендации:

    • Всегда использовать уникальный state для каждого запроса
    • Для мобильных приложений предпочтительнее TokenSourceWithPKCE