OAuth 2.0 — это протокол авторизации, который позволяет приложениям получать ограничённый доступ к данным пользователя без необходимости передавать его логин и пароль. Вместо прямой аутентификации, OAuth предоставляет access token — временный ключ, с которым стороннее приложение может выполнять определённые действия от имени пользователя.
Ключевая идея: пользователь подтверждает доступ, а сервис выдаёт токен — без раскрытия учётных данных. Это снижает риски компрометации паролей и даёт больше контроля над правами доступа.
Как работает OAuth 2.0 (упрощённо)
- Пользователь инициирует вход через стороннего провайдера (например, Google).
- OAuth-сервер запрашивает у пользователя разрешение на доступ.
- После подтверждения пользователь получает authorization code.
- Приложение обменивает его на access token.
- С помощью токена можно обращаться к защищённым API от имени пользователя.
Токены действуют ограниченное время, могут быть отозваны, а при необходимости — заменены через refresh token без повторного входа.
Применение OAuth 2.0
- Авторизация через Google, Facebook, GitHub и другие провайдеры;
- Доступ к API от имени пользователя — например, Google Calendar или Dropbox;
- Мобильные и SPA-приложения, где нельзя безопасно хранить логины и пароли;
- Микросервисные архитектуры, где сервисы общаются друг с другом по токенам;
- Интеграция SaaS-сервисов без прямой передачи чувствительных данных.
Преимущества OAuth 2.0
- Безопасность: доступ без раскрытия паролей;
- Гибкость: можно ограничивать области доступа (scope);
- Контроль: пользователи могут отзывать доступ в любой момент;
- Совместимость: поддерживается большинством крупных платформ и API.
Пример из жизни
Когда вы входите в Trello, Notion или Slack через аккаунт Google — вы используете OAuth 2.0. Google не передаёт пароль этим сервисам, а лишь подтверждает вашу личность и выдаёт токен для авторизации.
OAuth 2.0 — это фундамент безопасности в современной веб-разработке, мобильных приложениях и API-интеграциях. Он помогает упростить аутентификацию и защитить данные пользователей без лишнего риска.
Ниже — практический комплект из трёх частей, который можно использовать для реализации OAuth 2.0 в Kubernetes через Ingress, в Dev-пайплайне или GitHub OAuth-интеграции:
1. OAuth 2.0 через Ingress Controller в Kubernetes (например, oauth2-proxy + NGINX)
Helm-чарт: oauth2-proxy
(в связке с Google)
oauth2-proxy
# values.yaml config: clientID: "<GOOGLE_CLIENT_ID>" clientSecret: "<GOOGLE_CLIENT_SECRET>" cookieSecret: "<RANDOM_32BYTE_BASE64>" provider: google emailDomains: - "*" upstreams: - "file:///dev/null" redirectURL: "https://app.example.com/oauth2/callback" extraArgs: whitelist-domain: ".example.com"
Ingress с аутентификацией
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: app-ingress annotations: nginx.ingress.kubernetes.io/auth-url: "https://oauth2-proxy.example.com/oauth2/auth" nginx.ingress.kubernetes.io/auth-signin: "https://oauth2-proxy.example.com/oauth2/start?rd=$request_uri" spec: rules: - host: app.example.com http: paths: - path: / pathType: Prefix backend: service: name: app-service port: number: 80
📌 Пользователь не получит доступ к приложению, пока не пройдёт OAuth-авторизацию.
2. GitHub OAuth App: базовая настройка
Создаётся в https://github.com/settings/developers → New OAuth App
- Application name: MyApp GitHub Login
- Homepage URL:
https://myapp.example.com
- Authorization callback URL:
https://myapp.example.com/oauth/callback
На выходе ты получаешь
Client ID
Client Secret
3. CI/CD: пример использования токена OAuth в GitHub Actions
jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 - name: Exchange OAuth code for access token run: | TOKEN=$(curl -X POST \ -d "client_id=${{ secrets.GH_CLIENT_ID }}" \ -d "client_secret=${{ secrets.GH_CLIENT_SECRET }}" \ -d "code=${{ secrets.GH_AUTH_CODE }}" \ https://github.com/login/oauth/access_token \ | grep access_token | cut -d= -f2 | cut -d& -f1) echo "OAUTH_TOKEN=$TOKEN" >> $GITHUB_ENV - name: Use token run: curl -H "Authorization: token $OAUTH_TOKEN" https://api.github.com/user
📌 Этот шаг можно использовать для проверки пользователя, создания pull requests или чтения API GitHub от имени пользователя, прошедшего OAuth.