個人用アクセス トークンを使用する

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

個人用アクセス トークン (PAT) を代替パスワードとして使用して、Azure DevOps に対する認証を行うことができます。 この記事では、Azure DevOps の AT を作成、使用、変更、取り消す方法について説明します。

次のビデオでは、PAT を作成して使用する方法を示します。

PAT について

個人用アクセス トークンには、Azure DevOps のセキュリティ資格情報が含まれています。 PAT は、ユーザーとそのユーザーがアクセスできる組織、アクセスのスコープを識別します。 その意味でパスワードと変わらないほどの重要性があるため、同じように扱う必要があります。

Microsoft のツール内で作業している場合、Microsoft アカウント (MSA) または Microsoft Entra ID は、その条件を満たしており、十分に信頼できるアプローチです。 ただし、Microsoft アカウントも Microsoft Entra アカウントもサポートしないサードパーティのツールを使用している場合、つまり、主要な資格情報をツールに与えたくない場合は、PAT を使用してリスクを制限してください。

PAT の作成と管理は、次のいずれかの方法で行えます。

  • ユーザー設定内のユーザー インターフェイスを使用する (この記事で詳述)
  • PAT ライフサイクル管理 API を使用する

Microsoft 以外のツール用に PAT を設定するには、Git 資格情報マネージャーを使用するか、手動で作成します。 正しい認証メカニズムの選択に役立つ認証ガイダンスを確認することをお勧めします。 プロジェクトの規模が比較的小さく、ソリューションに堅牢性がさほど求められなければ、PAT で手軽に代用できます。 ユーザーは、資格情報マネージャーを使用していない限り、毎回資格情報を入力する必要があります。

PAT の作成

  1. 組織にサインインします (https://dev.azure.com/{yourorganization})。

  2. ホーム ページからユーザー設定 を開き、[個人用アクセス トークン] を選択します。

    選択した [個人用アクセス トークン] を示すスクリーンショット。

  3. [+ New Token] を選択します。

    選択した [新しいトークン] を示すスクリーンショット。

  4. トークンに名前を付け、トークンを使用する組織を選択し、設定した日数後にトークンの有効期限が自動的に切れるよう設定します。

    基本的なトークン情報のエントリを示すスクリーンショット。

  5. このトークンのスコープを選択して、特定のタスク承認します。

    たとえば、ビルド エージェントとリリース エージェントが Azure DevOps Services に対して認証できるようにするトークンを作成するには、トークンのスコープをエージェント プール (読み取りおよび管理)制限します。 監査ログ イベントを読み取り、ストリームを管理および削除するには、[監査ログの読み取り] を選択し、[作成] を選択します

    PAT の選択されたスコープを示すスクリーンショット。

    Note

    完全なスコープの PAT の作成が制限されている場合があります。 その場合、Microsoft Entra ID の Azure DevOps 管理者が、お客様を特定のカスタム定義のスコープ セットに制限するポリシーを有効にしています。 詳細については、「ポリシーを使用した PAT の管理/フル スコープの PAT の作成を制限する」を参照してください。 カスタム定義 PAT の場合、コンポーネント ガバナンス API にアクセスするために必要なスコープは、 vso.governanceUI では選択できません。

  6. 完了したら、トークンをコピーし、安全な場所に格納します。 セキュリティ上、再び表示されることはありません。

    トークンをクリップボードにコピーする方法を示すスクリーンショット。

警告

パスワードのように PAT を扱って使用し、秘密のままにしておいてください。

Azure DevOps での認証にユーザー資格情報が必要な任意の場所で PAT を使用します。

重要

Microsoft Entra ID によってサポートされている組織の場合、新しい PAT を使用してサインインするまで 90 日が必要です。それ以外の場合は非アクティブと見なされます。 詳細については、「条件付きアクセスのユーザー サインイン頻度」を参照してください

通知

ユーザーは PAT の有効期間中に 2 つの通知を受け取ります。1 つは作成時に、もう 1 つは有効期限の 7 日前です。

PAT を作成すると、次の例のような通知が表示されます。 この通知は、PAT が組織に追加されたことを確認します。

PAT で作成された通知を示すスクリーンショット。

次の図は、PAT の有効期限が切れる前の 7 日間の通知の例を示しています。

有効期限に近い PAT 通知を示すスクリーンショット。

詳細については、「SMTP サーバーを構成し、アラートとフィードバック要求の電子メールをカスタマイズする」を参照してください

予期しない通知

予期しない PAT 通知を受け取った場合、管理者またはツールがユーザーに代わって PAT を作成している可能性があります。 次の例を参照してください。

  • git.exeを使用して Azure DevOps Git リポジトリに接続する場合。 "git: https://MyOrganization.visualstudio.com/ on MyMachine" のような表示名を持つトークンが作成されます。
  • ユーザーまたは管理者が Azure アプリ Service Web アプリのデプロイを設定すると、"Service Hooks: : Azure アプリ Service: : Deploy Web app" のような表示名のトークンが作成されます。
  • 自分または管理者がパイプラインの一部として Web ロード テストを設定すると、"WebAppLoadTestCDIntToken" のような表示名を持つトークンが作成されます。
  • Microsoft Teams 統合メッセージング拡張機能を設定すると、"Microsoft Teams 統合" のような表示名を持つトークンが作成されます。

警告

PAT がエラーで存在すると思われる場合は、PAT を取り消すことが推奨されます。 次に、パスワードを変更します。 Microsoft Entra ユーザーとして、管理者とチェックして、組織が不明なソースまたは場所から使用されたかどうかを確認します。 パブリック GitHub リポジトリへの PAT の誤チェックに関する FAQ も参照してください。

PAT を使用する

PAT は自分の ID であり、パスワードと同様に、それを使用するときにユーザーを表します。

Git

Git の操作にはユーザー名が必要です。これは空の文字列以外の任意のユーザー名です。 HTTP 基本認証で PAT を使用するには、次のコード ブロックに含まれる for を使用Base64-encode$MyPatします。

PowerShell で、次のコードを入力します。

$MyPat = 'yourPat'
$headerValue = "Authorization: Basic " + [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes(":" + $MyPat))
$env:GIT_AUTH_HEADER = $headerValue

git --config-env=http.extraheader=GIT_AUTH_HEADER clone https://dev.azure.com/yourOrgName/yourProjectName/_git/yourRepoName

トークンの安全性を高めるために、資格情報マネージャーを使用して、毎回資格情報を入力する必要がないようにします。 Git Credential Manager をお勧めしますWindows 用の Git が必要です。

既存のリポジトリ

既存のリポジトリの場合、ユーザー名を使用して配信元を既に追加している場合は、最初に次のコマンドを実行します。

git remote remove origin

それ以外の場合は、次のコマンドを実行します。

git remote add origin https://<PAT>@<company_machineName>.visualstudio.com:/<path-to-git-repo> path to git repo = <project name>/_git/<repo_name> git push -u origin --all

コードで PAT を使用する

コードで PAT を使用できます。

HTTP ヘッダーを介して PAT を指定する場合は、まずそれを Base64 文字列に変換します。 次の例は、C# を使用して Base64 に変換する方法を示しています。


Authorization: Basic BASE64_USERNAME_PAT_STRING

結果の文字列は、次の形式で HTTP ヘッダーとして指定できます。

次の例では、C# の HttpClient クラス を使用します。

public static async void GetBuilds()
{
    try
    {
        var personalaccesstoken = "PATFROMWEB";

        using (HttpClient client = new HttpClient())
        {
            client.DefaultRequestHeaders.Accept.Add(
                new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
                Convert.ToBase64String(
                    System.Text.ASCIIEncoding.ASCII.GetBytes(
                        string.Format("{0}:{1}", "", personalaccesstoken))));

            using (HttpResponseMessage response = client.GetAsync(
                        "https://dev.azure.com/{organization}/{project}/_apis/build/builds?api-version=5.0").Result)
            {
                response.EnsureSuccessStatusCode();
                string responseBody = await response.Content.ReadAsStringAsync();
                Console.WriteLine(responseBody);
            }
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

ヒント

変数を使用している場合は、次の例のように、文字列の先頭に a を追加 $ します。

public static async void GetBuilds()
{
   try
  {
      var personalaccesstoken = "PATFROMWEB";

      using (HttpClient client = new HttpClient())
       {
           client.DefaultRequestHeaders.Accept.Add(
              new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

           client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
               Convert.ToBase64String(
                   System.Text.ASCIIEncoding.ASCII.GetBytes(
                       string.Format("{0}:{1}", "", personalaccesstoken))));

          using (HttpResponseMessage response = client.GetAsync(
                       $"https://dev.azure.com/{organization}/{project}/_apis/build/builds?api-version=5.0").Result)
           {
               response.EnsureSuccessStatusCode();
               string responseBody = await response.Content.ReadAsStringAsync();
               Console.WriteLine(responseBody);
           }
       }
   }
   catch (Exception ex)
   {
       Console.WriteLine(ex.ToString());
   }
}

コードが動作している場合は、基本認証 から OAuth に切り替えるのが良い時期です

AT の使用方法の詳細と例については、次の記事を参照してください。

PAT を変更する

PAT を再生成または拡張し、そのスコープ変更できます。 再生成後、以前の PAT は承認されなくなります。

  1. ホーム ページでユーザー設定を開き、[プロファイル] を選択 します

    PAT を変更するために選択するボタンのシーケンスを示すスクリーンショット。

  2. [セキュリティ] で、[個人用アクセス トークン] を選択 します。 変更するトークンを選択し、[編集] を選択します

    PAT を変更するために強調表示された [編集] ボタンを示すスクリーンショット。

  3. トークン名、トークンの有効期限、またはトークンに関連付けられているアクセスのスコープを編集し、[保存] を選択 します

    変更された PAT を示すスクリーンショット。

PAT を取り消す

さまざまな理由で、いつでも PAT を取り消すことができます。

  1. ホーム ページでユーザー設定を開き、[プロファイル] を選択 します

    選択するボタンのシーケンス、Team Services、プレビュー ページ、PAT の取り消しを示すスクリーンショット。

  2. [セキュリティ] で、[個人用アクセス トークン] を選択 します。 アクセスを取り消すトークンを選択し、[取り消し] を選択します

    1 つのトークンまたはすべてのトークンを取り消す選択を示すスクリーンショット。

  3. 確認ダイアログで [取り消し] を選択します。

    PAT を取り消す確認画面を示すスクリーンショット。

よく寄せられる質問

Q: ユーザー アカウントが無効になっている場合、PAT はどうなりますか?

A: ユーザーが Azure DevOps から削除されると、PAT は 1 時間以内に無効になります。 組織が Microsoft Entra ID に接続されている場合、PAT はユーザーに属しているため、Microsoft Entra ID でも無効になります。 サービスを実行し続けるために、ユーザーが PAT を別のユーザーまたはサービス アカウントにローテーションすることをお勧めします。

Q: REST API を使用して PAT を更新する方法はありますか。

A: はい。PAT ライフサイクル管理 API を使用して 、PAT を更新、管理、作成する方法があります。 詳細については、 REST API を使用した PAT の管理と FAQ に関するページを 参照してください

Q: すべての Azure DevOps REST API で基本認証を使用できますか。

A: いいえ。 ほとんどの Azure DevOps REST API で基本認証を使用できますが、組織とプロファイルでは OAuth のみがサポートされています。 詳細については、REST API を使用した PAT の管理に関するページを参照してください

Q: PAT を GitHub のパブリック リポジトリに誤ってチェックした場合はどうなりますか?

A: Azure DevOps は、GitHub 上のパブリック リポジトリにチェックされた AT をスキャンします。 漏洩したトークンが見つかると、すぐにトークン所有者に詳細な電子メール通知が送信され、イベントが Azure DevOps 組織の 監査ログに記録されます。 漏洩した個人用アクセス トークン自動取り消しポリシーを無効にした場合を除き、漏洩した PAT は直ちに取り消されます。 影響を受けるユーザーは、漏洩したトークンを取り消して新しいトークンに置き換えることで、直ちに軽減することをお勧めします。

詳細については、「リークした AT を自動的に取り消す」を参照してください

Q: 個人用アクセス トークンを ApiKey として使用して、dotnet/nuget.exe コマンド ラインを使用して NuGet パッケージを Azure Artifacts フィードに発行することはできますか。

A: いいえ。 Azure Artifacts では、個人用アクセス トークンを ApiKey として渡すことはサポートされていません。 ローカル開発環境を使用する場合は、Azure Artifacts で認証するために Azure Artifacts 資格情報プロバイダーをインストールすることをお勧めします。 詳細については、dotnetNuGet.exe の次の例を参照してください。 Azure Pipelines を使用してパッケージを発行する場合は、NuGet 認証タスクを使用してフィードの例で認証します。

Q: PAT が機能しなくなったのはなぜですか?

A: PAT 認証では、完全な認証フローを使用して Azure DevOps に定期的にサインインする必要があります。 多くの場合、30 日に 1 回で十分ですが、Microsoft Entra の構成によっては、より頻繁にサインインする必要がある場合があります。 PAT が機能しなくなった場合は、最初に組織にサインインして、完全な認証プロンプトを確認してください。 その後も PAT が機能しない場合は、PAT の有効期限が切れているかどうかを確認チェック。