OAuth 2.0

⌘K

OAuth 2.0

OAuth 2.0 — это протокол авторизации, который позволяет приложениям получать ограничённый доступ к данным пользователя без необходимости передавать его логин и пароль. Вместо прямой аутентификации, OAuth предоставляет access token — временный ключ, с которым стороннее приложение может выполнять определённые действия от имени пользователя.

Ключевая идея: пользователь подтверждает доступ, а сервис выдаёт токен — без раскрытия учётных данных. Это снижает риски компрометации паролей и даёт больше контроля над правами доступа.


Как работает OAuth 2.0 (упрощённо)

  1. Пользователь инициирует вход через стороннего провайдера (например, Google).
  2. OAuth-сервер запрашивает у пользователя разрешение на доступ.
  3. После подтверждения пользователь получает authorization code.
  4. Приложение обменивает его на access token.
  5. С помощью токена можно обращаться к защищённым 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)

# 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/developersNew 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, которые нужно передать в OAuth middleware или прокси.


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.