Часто задаваемые вопросы (FAQ)

Info

Ответы на популярные вопросы о приложениях OAuth 2.0 в GitVerse.

Общие вопросы

В чем разница между Конфиденциальным и Публичным клиентом?

Конфиденциальный клиент — серверное приложение с client_secret, которое безопасно хранит секрет на сервере.
Публичный клиент — приложение без секрета (мобильное, десктопное, SPA).

Единственное различие — способ авторизации на token endpoint: Public-клиент авторизируется только по client_id, а Конфиденциальный клиент — по client_id + client_secret. Оба типа клиентов используют PKCE.

Подробная таблица со сравнением см. в разделе Типы клиентов.

Можно ли использовать Implicit Grant?

Нет. GitVerse поддерживает только Authorization Code Flow с PKCE. Implicit Grant (response_type=token) отклоняется ошибкой unsupported_response_type, так как он устаревший и уязвимый (токен в URL передается в открытом виде). Подробнее см. в разделе Авторизация приложений OAuth 2.0.

Можно ли использовать Client Credentials Grant?

Нет. Автоматизированная авторизация (без участия пользователя) в текущей реализации не поддерживается.

Можно ли использовать Device Authorization Grant?

Нет. Device Authorization Grant (RFC 8628) в текущей реализации не поддерживается. GitVerse поддерживает только Authorization Code Flow с PKCE. Подробнее см. в разделе Авторизация приложений OAuth 2.0.


PKCE

PKCE обязателен для всех клиентов?

Да. PKCE обязателен для всех типов клиентов (Публичных и Конфиденциальных) на GitVerse. См. Типы клиентов.

Какие методы PKCE поддерживаются?

Поддерживаются два метода code_challenge_method:

  • S256 (SHA-256) — рекомендуется, по умолчанию;
  • plain — без хеширования (менее безопасный).

Создание и управление приложениями

Я забыл Клиентский ключ. Можно ли его восстановить?

Нет. Клиентский ключ хранится в хешированном виде (bcrypt) и не может быть восстановлен. Единственный способ — нажать Сгенерировать новый ключ:

  1. Перейдите в настройки приложения.
  2. Нажмите Сгенерировать новый ключ.
  3. Сохраните новое значение.

Warning

Старый secret сразу станет недействительным. Активные токены, выданные до регенерации, остаются действительными.

Сколько приложений я могу создать?

На текущий момент ограничений на количество приложений нет.

Какие Redirect URI разрешены?

  • https://... — любые HTTPS-URL (точный URI, без wildcard);
  • http://localhost:* — HTTP разрешен только для localhost (локальная разработка).

Wildcard-URI (*, https://*, https://*.example.com) не разрешены.


Scope и права

Полный список доступных scope см. в Областях доступа.

Чем write:repository отличается от write:user?

write:repository управляет репозиториями: просмотр кода, файлов, коммитов, веток, тегов, релизов, wiki, коллабораторов, форков, webhook’ов, Actions + создание, изменение и удаление этих ресурсов.

write:user управляет профилем пользователя: просмотр профиля, email, аватара, SSH/GPG-ключей + изменение этих данных, подписок, приложений OAuth 2.0 и access-токенов.

Оба scope независимы: write:repository не дает прав на изменение профиля, а write:user не дает прав на работу с репозиториями.

Что произойдет, если приложение запросит другие scope, чем при первой авторизации?

Если приложение в будущем запросит другие scope (отличные от изначально подтвержденных пользователем), весь процесс авторизации отклонится — потребуется полная повторная авторизация.

Что происходит с неизвестными scope?

Если приложение запрашивает scope, который не известен GitVerse, такой scope игнорируется — он не вызывает ошибку и не прерывает флоу авторизации. Запрошенный scope просто не включается в выданный access_token.

Warning

Если вы опечатались в названии scope, он будет проигнорирован и приложение получит меньшие права, чем ожидалось.


Безопасность

Что делать, если я подозреваю компрометацию Клиентского ключа?

Срочно нажмите Сгенерировать новый ключ:

  1. Перейдите в настройки приложения.
  2. Нажмите Сгенерировать новый ключ.
  3. Обновите ключ в вашем приложении.

Подробнее см. в разделе Управление приложениями.

Как отозвать доступ приложению?

  1. Перейдите в Приложения.
  2. Найдите нужное приложение.
  3. Нажмите Отозвать.
  4. Подтвердите действие.

Все токены этого приложения сразу станут недействительными.

Подробнее читайте в разделе Просмотр авторизованных приложений.

Как работает защита от CSRF?

Используйте параметр state при запросе авторизации:

  1. Сгенерируйте случайную строку state.
  2. Передайте ее в GET /authorize?state=....
  3. При callback проверьте, что возвращенный state совпадает с оригиналом.

Подробнее о защите от CSRF см. в Лучших практиках.


Организации и администрирование

Чем организационное приложение отличается от личного?

Личное приложение принадлежит пользователю и имеет доступ к его ресурсам + публичным ресурсам.
Организационное приложение принадлежит организации (создается Owner/Admin) и имеет доступ к ресурсам организации + публичным ресурсам, но не к личным ресурсам пользователей.


Дополнительно

Подробности по авторизации, токенам и устранению ошибок см. в Справочной документации: