Skip to main content

Actions ワークフローで App を使用して認証済み API 要求を作成する

App からのインストール アクセス トークンを使って、 Actions ワークフローで認証済み API 要求を行うことができます。 トークンをカスタム アクションに渡して、アクションで認証済み API 要求を行えるようにすることもできます。

Actions の認証について

Actions ワークフローで認証済み API 要求を行う必要がある場合、またはトークンを必要とするカスタム アクションを実行する必要がある場合は、可能であれば組み込みの _TOKEN を使う必要があります。 ただし、_TOKEN でアクセスできるのは、ワークフローのリポジトリ内のリソースだけです。 Organization 内や別のリポジトリ内のリソースなど、追加のリソースにアクセスする必要がある場合は、 App を使用できます。 personal access token ではなく App を使う場合の理由の詳細については、「 App の作成について」を参照してください。

App による認証

App を使って認証済み API 要求を行うには、 App を登録し、アプリの資格情報を格納して、アプリをインストールする必要があります。 これが済んだら、アプリを使ってインストール アクセス トークンを作成できます。それを使って、 Actions ワークフローで認証済み API 要求を行うことができます。 トークンを必要とするカスタム アクションにインストール アクセス トークンを渡すこともできます。

  1. App を登録します。 App 登録に、目的のリソースにアクセスするために必要なアクセス許可を付与します。 詳細については、「 App の登録」および「 アプリのアクセス許可を選択する」を参照してください。

  2. App のアプリ ID を Actions 構成変数として格納します。 アプリ ID は、アプリの設定ページで確認できます。 アプリ ID は、クライアント ID とは異なります。 App の [Settings] ページに移動する方法の詳細については、「 App 登録の変更」を参照してください。 構成変数の保存の詳細については、「変数に情報を格納する」を参照してください。

  3. アプリケーションの秘密鍵を生成してください。 作成されたファイルの内容をシークレットとして保存します。 (-----BEGIN RSA PRIVATE KEY----------END RSA PRIVATE KEY----- など、ファイルの内容全体を格納します)。詳しくは、「 Apps の秘密キーの管理」をご覧ください。 シークレットの保管の詳細については、「 Actions でのシークレットの使用」を参照してください。

  4. App をユーザー アカウントまたは Organization にインストールし、ワークフローでアクセスするリポジトリへのアクセス権をそれに付与します。 詳しくは、「独自の App のインストール」をご覧ください。

  5. Actions ワークフローで、API 要求を行うために使用できるインストール アクセス トークンを作成します。

    これを行うには、次の例に示すように、 所有のアクションを使用できます。 サード パーティのアクションを使いたくない場合は、actions/create--app-tokenアクションをフォークして変更するか、ワークフローでインストール トークンを手動で作成するスクリプトを記述できます。 詳しくは、「 App インストールとしての認証」をご覧ください。

    次に例示するワークフローでは、actions/create--app-token アクションを使ってインストール アクセス トークンを生成します。 その後、ワークフローでそのトークンを使って、 CLI から API 要求を行います。

    次のワークフローの APP_ID を、アプリ ID を格納した構成変数の名前に置き換えます。 APP_PRIVATE_KEY を、アプリの秘密キーを格納したシークレットの名前に置き換えます。

YAML
on:
  workflow_dis:
jobs:
  demo_app_authentication:
    runs-on: ubuntu-latest
    steps:
      - name: Generate a token
        id: generate-token
        uses: actions/create--app-token@v1
        with:
          app-id: ${{ vars.APP_ID }}
          private-key: ${{ secrets.APP_PRIVATE_KEY }}

      - name: Use the token
        env:
          GH_TOKEN: ${{ steps.generate-token.outputs.token }}
        run: |
          gh api octocat