Что знаешь про OAuth

«Что знаешь про OAuth» — вопрос из категории Безопасность, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

OAuth — это открытый протокол авторизации, позволяющий предоставлять доступ к ресурсам пользователя без передачи логина и пароля. Работает через токены доступа (access token) и обновления (refresh token).

Основные роли:

  • Resource Owner — пользователь, чьи данные запрашиваются.
  • Client — приложение, запрашивающее доступ.
  • Authorization Server — выдает токены (например, Google, GitHub).
  • Resource Server — API, защищенное OAuth.

Пример с GitHub OAuth:

package main

import (
    "context"
    "fmt"
    "golang.org/x/oauth2"
    "golang.org/x/oauth2/github"
)

var oauthConf = &oauth2.Config{
    ClientID:     "your-client-id",
    ClientSecret: "your-client-secret",
    Scopes:       []string{"repo", "user"},
    Endpoint:     github.Endpoint,
}

func main() {
    url := oauthConf.AuthCodeURL("state", oauth2.AccessTypeOffline)
    fmt.Printf("Visit: %sn", url) // Перенаправляем пользователя
}

Популярные потоки (flows):

  • Authorization Code — для веб-приложений.
  • Implicit — устарел, не используйте.
  • Client Credentials — для сервис-сервисного взаимодействия.
  • Device Flow — для устройств без браузера.

Безопасность: Всегда проверяйте state для защиты от CSRF.