1
0
mirror of synced 2026-01-18 06:01:38 -05:00
Files
docs/translations/ru-RU/content/developers/apps/building-github-apps/authenticating-with-github-apps.md
2022-12-12 17:21:29 +00:00

15 KiB
Raw Blame History

title, intro, redirect_from, versions, topics, shortTitle, ms.openlocfilehash, ms.sourcegitcommit, ms.translationtype, ms.contentlocale, ms.lasthandoff, ms.locfileid
title intro redirect_from versions topics shortTitle ms.openlocfilehash ms.sourcegitcommit ms.translationtype ms.contentlocale ms.lasthandoff ms.locfileid
Проверка подлинности с помощью приложений GitHub {% data reusables.shortdesc.authenticating_with_github_apps %}
/apps/building-integrations/setting-up-and-registering-github-apps/about-authentication-options-for-github-apps
/apps/building-github-apps/authentication-options-for-github-apps
/apps/building-github-apps/authenticating-with-github-apps
/developers/apps/authenticating-with-github-apps
fpt ghes ghae ghec
* * * *
GitHub Apps
Authentication 5530e34207140e7beab836a2a7bc9a70d0066c20 5f40f9341d MT ru-RU 10/04/2022 148009875

Создание закрытого ключа

После создания приложения GitHub нужно создать один или несколько закрытых ключей. Закрытый ключ будет использоваться для подписи запросов маркера доступа.

Вы можете создать несколько закрытых ключей, а затем менять скомпрометированные или потерянные ключи, чтобы избежать простоя. Для проверки соответствия закрытого ключа открытому изучите раздел Проверка закрытого ключа.

Чтобы создать закрытый ключ, выполните следующие действия.

{% data reusables.user-settings.access_settings %} {% data reusables.user-settings.developer_settings %} {% data reusables.user-settings.github_apps %} {% data reusables.user-settings.modify_github_app %} 5. В разделе "Закрытые ключи" щелкните Создать закрытый ключ. Создание закрытого ключа 6. Вы увидите скачанный на компьютер закрытый ключ в формате PEM. Не забудьте сохранить этот файл, поскольку GitHub хранит только открытую часть ключа.

{% note %}

Примечание. Если вы используете библиотеку, для которой требуется определенный формат файлов, скачанный файл PEM будет иметь формат PKCS#1 RSAPrivateKey.

{% endnote %}

Проверка закрытых ключей

{% data variables.product.product_name %} создает отпечаток для каждой пары закрытого и открытого ключей с помощью хэш-функции SHA-256. Вы можете проверить, соответствует ли закрытый ключ открытому ключу, хранящемуся в {% data variables.product.product_name %}, создав отпечаток закрытого ключа и сравнив его с отпечатком в {% data variables.product.product_name %}.

Для проверки закрытого ключа выполните следующее.

  1. Найдите отпечаток для проверяемой пары закрытого и открытого ключей в разделе "Закрытые ключи" на странице параметров разработчика {% data variables.product.prodname_github_app %}. Дополнительные сведения см. в разделе Создание закрытого ключа. Отпечаток закрытого ключа
  2. Создайте отпечаток закрытого ключа (PEM) локально с помощью следующей команды:
    $ openssl rsa -in PATH_TO_PEM_FILE -pubout -outform DER | openssl sha256 -binary | openssl base64
    
  3. Сравните результаты локально созданного отпечатка с отпечатком, который отображается в {% data variables.product.product_name %}.

Удаление закрытых ключей

Вы можете удалить потерянный или скомпрометированный закрытый ключ, но у вас всегда должен существовать быть хотя бы один закрытый ключ. Если у вас только один ключ, то прежде чем удалять его, нужно создать новый. Удаление последнего закрытого ключа

Проверка подлинности от имени {% data variables.product.prodname_github_app %}

Проверка подлинности от имени {% data variables.product.prodname_github_app %} позволяет выполнить несколько действий:

  • Вы можете получить обобщенные сведения об управлении {% data variables.product.prodname_github_app %}.
  • Вы можете запросить маркеры доступа для установки приложения.

Для проверки подлинности от имени {% data variables.product.prodname_github_app %} создайте закрытый ключ в формате PEM и скачайте его на локальный компьютер. Этот ключ будет использоваться для подписи веб-маркера JSON (JWT) и его кодирования по алгоритму RS256. {% data variables.product.product_name %} проверяет подлинность запроса, сопоставляя маркер с сохраненным открытым ключом приложения.

Вот простой пример скрипта Ruby, который позволяет создать JWT. Обратите внимание, что перед его использованием необходимо выполнить gem install jwt.

require 'openssl'
require 'jwt'  # https://rubygems.org/gems/jwt

# Private key contents
private_pem = File.read("YOUR_PATH_TO_PEM")
private_key = OpenSSL::PKey::RSA.new(private_pem)

# Generate the JWT
payload = {
  # issued at time, 60 seconds in the past to allow for clock drift
  iat: Time.now.to_i - 60,
  # JWT expiration time (10 minute maximum)
  exp: Time.now.to_i + (10 * 60),
  # {% data variables.product.prodname_github_app %}'s identifier
  iss: "YOUR_APP_ID"
}

jwt = JWT.encode(payload, private_key, "RS256")
puts jwt

Значения YOUR_PATH_TO_PEM и YOUR_APP_ID нужно заменить. Обязательно заключите значения в двойные кавычки.

Используйте идентификатор {% data variables.product.prodname_github_app %} (YOUR_APP_ID) в качестве значения для утверждения JWT iss (издатель). Идентификатор {% data variables.product.prodname_github_app %} можно получить сразу после создания приложения при начальной проверке связи с веб-перехватчиком или в любое другое время на странице параметров приложения в пользовательском интерфейсе GitHub.com.

После создания JWT поместите его в параметр Header запроса к API:

$ curl -i -H "Authorization: Bearer YOUR_JWT" -H "Accept: application/vnd.github+json" {% data variables.product.api_url_pre %}/app

YOUR_JWT — это значение, которое нужно заменить.

В приведенном выше примере максимальное время окончания срока действия составляет 10 минут, а после его истечения API будет возвращать ошибку 401:

{
  "message": "'Expiration' claim ('exp') must be a numeric value representing the future time at which the assertion expires.",
  "documentation_url": "{% data variables.product.doc_url_pre %}"
}

После истечения срока действия потребуется создать новый JWT.

Доступ к конечным точкам API от имени {% data variables.product.prodname_github_app %}

Список конечных точек REST API, которые можно использовать для получения общих сведений о {% data variables.product.prodname_github_app %}, см. в разделе GitHub Apps (Приложения GitHub).

Проверка подлинности от имени установки

Проверка подлинности от имени установки позволяет выполнять действия в API для этой установки. Чтобы использовать проверку подлинности от имени установки, необходимо создать маркер доступа для этой установки. Убедитесь, что приложение GitHub уже установлено хотя бы в один репозиторий, иначе вы не сможете создать маркер установки. {% data variables.product.prodname_github_apps %} использует эти маркеры доступа для проверки подлинности. Дополнительные сведения см. в разделе Installing GitHub Apps (Установка приложений GitHub).

По умолчанию в область действия маркеров доступа для установки входят все репозитории, к которым имеет доступ установка. Вы можете ограничить область действия маркера доступа для установки некоторым подмножеством репозиториев, используя параметр repository_ids. Дополнительные сведения см. в статье Создание маркера доступа для установки в приложении. Разрешения маркеров доступа для установки имеют разрешения настраиваются в {% data variables.product.prodname_github_app %} и истекают через один час.

Чтобы получить список установок для приложения, прошедшего проверку подлинности, укажите созданный выше JWT в заголовке Authorization при запросе к API:

$ curl -i -X GET \
-H "Authorization: Bearer YOUR_JWT" \
-H "Accept: application/vnd.github+json" \
{% data variables.product.api_url_pre %}/app/installations

Ответ будет содержать список установок, в которых можно использовать id каждой установки, чтобы создать маркер доступа для установки. Дополнительные сведения о формате ответа см. в статье Список установок для приложения, прошедшего проверку подлинности.

Чтобы создать маркер доступа для установки, укажите созданный выше JWT в заголовке авторизации при запросе к API и замените :installation_id значением id для установки:

$ curl -i -X POST \
-H "Authorization: Bearer YOUR_JWT" \
-H "Accept: application/vnd.github+json" \
{% data variables.product.api_url_pre %}/app/installations/:installation_id/access_tokens

Ответ будет содержать маркер доступа для установки, дату окончания срока действия, разрешения маркера и репозитории, к которым может получить доступ этот маркер. Дополнительные сведения о формате ответа см. в статье Создание маркера доступа для установки в конечной точке приложения.

Чтобы выполнить проверку подлинности с помощью маркера доступа для установки, добавьте его в заголовок Authorization при запросе к API:

$ curl -i \
-H "Authorization: Bearer YOUR_INSTALLATION_ACCESS_TOKEN" \
-H "Accept: application/vnd.github+json" \
{% data variables.product.api_url_pre %}/installation/repositories

YOUR_INSTALLATION_ACCESS_TOKEN — это значение, которое нужно заменить.

{% note %}

Примечание. {% data reusables.getting-started.bearer-vs-token %}

{% endnote %}

Доступ к конечным точкам API от имени установки

Список конечных точек REST API, к которым {% data variables.product.prodname_github_apps %} могут обращаться с использованием маркера доступа для установки, см. в статье Доступные конечные точки.

Список конечных точек, связанных с установками, см. в разделе Installations (Установки).

Доступ к Git по протоколу HTTP от имени установки

Установки с разрешениями для репозитория contents могут использовать маркеры доступа для установки, чтобы выполнять проверку подлинности при доступе к Git. Используйте маркер доступа для установки в качестве пароля HTTP:

git clone https://x-access-token:<token>@github.com/owner/repo.git