Пакет 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
- контекст для операции Exchangeconfig
- полная конфигурация OAuth (AuthURL, TokenURL, Scope)state
- уникальная строка состояния для защиты от CSRFauthHandler
- обработчик авторизации для получения согласия пользователя
Особенности:
- Проверяет соответствие параметра
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
Рекомендации:
- Генерировать уникальные challenge/verifier во время выполнения
- Подробнее: https://www.oauth.com/oauth2-servers/pkce/
Типы
type AuthorizationHandler
type AuthorizationHandler func(authCodeURL string) (code string, state string, err error)
AuthorizationHandler - обработчик для трехногового OAuth, который:
- Перенаправляет пользователя по URL для получения согласия
- Возвращает auth-код и состояние после подтверждения
type PKCEParams
type PKCEParams struct {
Challenge string // Зашифрованный code verifier (base64-url)
ChallengeMethod string // Метод шифрования (напр. S256)
Verifier string // Оригинальный секрет (незашифрованный)
}
PKCEParams содержит параметры для защиты потока PKCE.
Особенности реализации
-
Безопасность:
- Обязательная проверка параметра
state
- Поддержка современных методов защиты PKCE
- Обязательная проверка параметра
-
Гибкость:
- Возможность кастомной обработки авторизации
- Поддержка различных методов шифрования PKCE
-
Рекомендации:
- Всегда использовать уникальный
state
для каждого запроса - Для мобильных приложений предпочтительнее TokenSourceWithPKCE
- Всегда использовать уникальный