15 KiB
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 %} |
|
|
|
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 %}.
Для проверки закрытого ключа выполните следующее.
- Найдите отпечаток для проверяемой пары закрытого и открытого ключей в разделе "Закрытые ключи" на странице параметров разработчика {% data variables.product.prodname_github_app %}. Дополнительные сведения см. в разделе Создание закрытого ключа.

- Создайте отпечаток закрытого ключа (PEM) локально с помощью следующей команды:
$ openssl rsa -in PATH_TO_PEM_FILE -pubout -outform DER | openssl sha256 -binary | openssl base64 - Сравните результаты локально созданного отпечатка с отпечатком, который отображается в {% 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