次の方法で共有


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

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

個人用アクセス トークン (PAT) は、Azure DevOps に認証するための代替パスワードとして機能できます。 この記事では、Azure DevOps の PAT を作成、使用、変更、取り消すプロセスについて説明します。

PAT について

個人用アクセス トークン (PAT) は、Azure DevOps のセキュリティ資格情報として機能します。 この PAT は、ユーザーを識別するだけでなく、アクセスのアクセシビリティとスコープも決定します。 そのため、PAT はパスワードと同じくらい重要であり、同じレベルの注意を払って処理する必要があります。

Microsoft ツールを使用している場合は、Microsoft アカウント (MSA) または Microsoft Entra ID が認識され、サポートされている方法です。 ただし、Microsoft または Microsoft Entra アカウントをサポートしていないサード パーティ製のツールを使用している場合や、これらのツールでプライマリ資格情報を共有することを嫌がる場合は、より安全な代替手段として PAT が使用されます。

次の 2 つの方法で、AT を作成および管理します。

Microsoft 以外のツールの AT を確立するには、 Git 資格情報マネージャーを使用するか 手動で生成します。 適切な認証メカニズムの選択に役立つ認証ガイダンスを確認することをお勧めします。 AT は、広範なソリューションを必要としない小規模なプロジェクトに代わる簡単な手段として機能します。 資格情報マネージャーが使用中でない限り、ユーザーは毎回資格情報を入力する必要があります。

PAT の作成

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

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

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

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

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

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

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

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

    たとえば、 build およびリリース エージェントを有効にするトークンを作成 Azure DevOps に対する認証を行うには、トークンのスコープを Agent プール (読み取りおよび管理) に制限します。 監査ログ イベントを読み取り、ストリームを管理および削除するには、 監査ログの読み取りを選択し、 Create を選択します。

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

    Note

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

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

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

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

重要

  • パスワードと同じ注意を払って PAT を処理し、秘密にしておきます。
  • Microsoft Entra ID によってサポートされている組織の場合、90 日以内に新しい PAT でサインインする必要があります。そうしないと PAT が非アクティブになります。 詳細については、「条件付きアクセス ユーザーのサインイン頻度を参照してください。

通知

PAT の有効期間中、ユーザーは 2 つの通知を受け取ります。これは、作成時の最初の通知と、有効期限の 7 日前の 2 番目の通知です。

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

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

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

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

予期しない通知

予期しない PAT 通知が表示された場合は、管理者またはツールによって PAT が作成された可能性があります。 いくつか例を挙げます。

  • git.exe経由で Azure DevOps Git リポジトリに接続すると、"git: yourMachine に https://dev.azure.com/{Your_Organization} " という名前のトークンが作成されます。
  • "Service Hooks: : Azure アプリ Service: : Deploy Web app" という名前のトークンは、Azure アプリ Service Web アプリのデプロイがユーザーまたは管理者によって設定されたときに作成されます。
  • "WebAppLoadTestCDIntToken" という名前のトークンは、ユーザーまたは管理者が Web ロード テストをパイプラインの一部として設定するときに作成されます。
  • Microsoft Teams Integration Messaging Extension が設定されると、"Microsoft Teams Integration" という名前のトークンが作成されます。

警告

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

PAT を使用する

PAT はデジタル ID として機能し、パスワードと同様に、利用時にユーザーを表します。

Git

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

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 をお勧めします。 Git for Windows が必要です。

既存のリポジトリ

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

git remote remove origin

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

git remote add origin https://dev.azure.com/<PAT>@<company_machineName>:/<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());
    }
}

ヒント

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

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. ホーム ページでユーザー設定を開き、 Profile を選択します。

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

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

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

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

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

PAT を取り消す

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

  1. ホーム ページでユーザー設定を開き、 Profile を選択します。

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

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

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

  3. 確認ダイアログで Revoke を選択します。

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

よく寄せられる質問

Q: 1 つの組織にスコープが設定されている PAT を編集または再生成できないのはなぜですか。

A: PAT のスコープが設定されている組織にサインインしていることを確認します。 同じ Microsoft Entra ID で任意の組織にサインインしている間すべての AT を表示できますが、編集組織スコープのトークンは、スコープが設定されている組織にサインインしている場合にのみ実行できます。

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 を使用した MANage 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 組織の audit ログに記録されます自動で漏洩した個人用アクセス トークンの取り消しポリシーを無効にしない限り、漏洩した PAT は直ちに取り消されます。 影響を受けるユーザーは、漏洩したトークンを 新しいトークンに置き換えることで、直ちに軽減することをお勧めします。

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

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

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

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

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