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

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

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

PAT について

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

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

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

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

PAT の作成

注意

Web ポータルから表示される画像は、この記事に表示される画像と異なる場合があります。 これらの違いは、Azure DevOps または有効なプレビュー機能に対して行われた更新による結果です。 [新しいアカウント マネージャー] ページ機能が有効になりました。 使用できる基本的な機能は、明示的に説明しない限り変わりません。

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

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

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

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

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

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

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

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

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

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

    注意

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

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

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

警告

パスワードのように PAT を扱って使用し、秘密にしておきます。

  1. Web ポータルにサインインします (https://{server}:8080/tfs/)。

  2. ホーム ページからプロフィールを開きます。 セキュリティの詳細に移動します。

    ホーム ページ、プロファイルを開く、セキュリティ ボタンを示すスクリーンショット。

  3. 個人用アクセス トークンを作成します。

    個人用アクセス トークンの追加を示すスクリーンショット。

  4. トークンに名前を付けます。 トークンの有効期間を選択します。

    複数の組織がある場合は、トークンを使用する組織を選択することもできます。

    トークン名と有効期間を含む情報エントリを示すスクリーンショット。

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

    たとえば、 ビルド エージェントとリリース エージェント の認証を有効にするトークンを作成するには、トークンのスコープを エージェント プール (読み取り、管理) に制限します。

  6. 完了したら、 必ずトークンをコピーしてください。 セキュリティのために、再び表示されることはありません。 このトークンをパスワードとして使用します。 [閉じる] を選択します。

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

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

重要

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

通知

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

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

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

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

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

予期しない通知

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

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

警告

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

PAT を使用する

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

Git

Git のやり取りにはユーザー名が必要です。空の文字列以外のユーザー名を指定できます。 HTTP 基本認証で PAT を使用するには、次のコード ブロックに含まれている for と $MyPat() を使用Base64-encodeします。

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

$MyPat = 'yourPAT'

$B64Pat = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("`:$MyPat"))

git -c http.extraHeader="Authorization: Basic $B64Pat" clone https://dev.azure.com/yourOrgName/yourProjectName/_git/yourRepoName


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

既存のリポジトリ

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

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 を使用できますが、次の警告に注意してください。

警告

一部のパブリック API は現在 PAT スコープと関連付けられていないため、"フル スコープ" の PAT でのみ使用できます。 このため、フル スコープの AT の作成を制限すると、一部のワークフローがブロックされる可能性があります。 影響を受ける API を特定して文書化し、最終的に適切なスコープに関連付ける作業を行っています。 現時点では、許可リストを使用してこれらのワークフローのブロックを解除できます。

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 に切り替えるのが良い時期です。

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

TFS に対して IIS 基本認証を有効にした場合、ATA は有効ではありません。 詳細については、「 TFS オンプレミスでの IIS 基本認証の使用」を参照してください。

PAT を変更する

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

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

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

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

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

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

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

PAT を取り消す

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

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

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

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

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

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

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

FAQ

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

A: ユーザーが Azure DevOps から削除されると、PAT は 1 時間以内に無効になります。 組織が Azure Active Directory (Azure AD) に接続されている場合、PAT はユーザーに属しているため、Azure AD でも無効になります。 サービスを実行し続けるために、ユーザーが 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 上のパブリック リポジトリにチェックインされた PAT をスキャンします。 漏洩したトークンが見つかると、すぐにトークン所有者に詳細な電子メール通知が送信され、イベントが Azure DevOps 組織の 監査ログに記録されます。 影響を受けるユーザーは、漏洩した PAT を交換または取り消すことで、直ちに軽減することをお勧めします。

漏洩した PAT を管理するためのポリシーがあります。 詳細については、「 リークした AT を自動的に取り消す」を参照してください。

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

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