Пакет clientcredentials OAuth 2.0 Client Credentials Flow

Пакет реализует поток OAuth 2.0 учетные данные клиента client credentials, также известный как двухногая OAuth 2.0

Используется, когда:

  • Клиент действует от своего имени
  • Клиент является владельцем ресурса
  • Запрашивается доступ к защищенным ресурсам на основе предварительной авторизации

Спецификация: https://tools.ietf.org/html/rfc6749#section-4.4

Тип Config

type Config struct {
    // ClientID - идентификатор приложения
    ClientID string
    
    // ClientSecret - секрет приложения  
    ClientSecret string
    
    // TokenURL - endpoint сервера для получения токенов
    TokenURL string
    
    // Scopes - запрашиваемые разрешения (опционально)
    Scopes []string
    
    // EndpointParams - дополнительные параметры запроса
    EndpointParams url.Values
    
    // AuthStyle - способ аутентификации клиента
    AuthStyle oauth2.AuthStyle
}

Config описывает двухноговый OAuth2 поток, содержащий информацию о клиентском приложении и URL endpoint’ов сервера.

Методы Config

func (*Config) Client

func (c *Config) Client(ctx context.Context) *http.Client

Возвращает HTTP-клиент, который:

  • Автоматически добавляет токены авторизации
  • Обновляет токены по истечении срока
  • Использует HTTP-клиент из контекста (через oauth2.HTTPClient)

Важно: возвращенный клиент и его Transport не должны изменяться.

func (*Config) Token

func (c *Config) Token(ctx context.Context) (*oauth2.Token, error) 

Получает токен, используя учетные данные клиента (client credentials).

Может использовать кастомный HTTP-клиент из контекста.

func (*Config) TokenSource

func (c *Config) TokenSource(ctx context.Context) oauth2.TokenSource

Возвращает источник токенов, который:

  • Возвращает текущий токен, пока он действителен
  • Автоматически обновляет токен при истечении срока
  • Использует client ID и client secret для обновления

Рекомендация: большинству пользователей следует использовать Config.Client вместо прямого использования TokenSource.

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

  1. Сценарии использования:

    • Сервер-серверное взаимодействие
    • Микросервисная архитектура
    • Фоновые процессы без участия пользователя
  2. Безопасность:

    • ClientSecret должен храниться защищенно
    • Рекомендуется использовать HTTPS для всех запросов
  3. Гибкость:

    • Поддержка различных методов аутентификации (AuthStyle)
    • Возможность передачи дополнительных параметров (EndpointParams)