tech・1分で読める
GitHub AppsのJWTをローカルで生成する(bash + openssl)
GitHub Appのinstallation tokenを取得するためのJWTを、bash + opensslで最小構成で生成するメモ。
#GitHub#GitHub Apps#JWT#bash#openssl
GitHub AppsのJWTをローカルで生成する(bash + openssl)
GitHub App の installation token を取得するには、まず GitHub App の JWT(RS256) が必要です。
手元でサクッと作る用のメモ。
#!/bin/bash set -euo pipefail # GitHub App settings から取得 client_id="" # App ID(もしくは Client ID 相当の値) installation_id="" # Installation ID # GitHub App の秘密鍵(PEM) pem_file="./xxx.pem" [ -f "${pem_file}" ] || { echo "PEM file not found: ${pem_file}" >&2; exit 1; } now=$(date +%s) iat=$((now - 60)) exp=$((now + 600)) b64enc() { openssl base64 | tr -d '=' | tr '/+' '_-' | tr -d '\n'; } header_json='{"typ":"JWT","alg":"RS256"}' header=$(printf '%s' "${header_json}" | b64enc) payload_json="{\"iat\":${iat},\"exp\":${exp},\"iss\":\"${client_id}\"}" payload=$(printf '%s' "${payload_json}" | b64enc) header_payload="${header}.${payload}" signature=$(printf '%s' "${header_payload}" | openssl dgst -sha256 -sign "${pem_file}" | b64enc) JWT="${header_payload}.${signature}" printf '%s\n' "JWT: ${JWT}" # installation token request curl --request POST \ --url "https://api.github.com/app/installations/${installation_id}/access_tokens" \ --header "Accept: application/vnd.github+json" \ --header "Authorization: Bearer ${JWT}" \ --header "X-GitHub-Api-Version: 2022-11-28"