Ответ
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.