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

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 の作成

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

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

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

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

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

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

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

  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. ホーム ページからプロファイルを開きます。 セキュリティの詳細に移動します。

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

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

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

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

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

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

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

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

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

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

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

重要

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

通知

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

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

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 統合" のような表示名を持つトークンが作成されます。

警告

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

PAT を使用する

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

Git

Git の操作にはユーザー名が必要です。空の文字列以外の任意のユーザー名を指定できます。 HTTP 基本認証で PAT を使用するには、 と $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 をお勧めします。 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());
    }
}

ヒント

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

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 の使用方法の詳細と例については、次の記事を参照してください。

IIS 基本認証を有効にした場合、PAT は無効です。 詳細については、「 オンプレミスでの 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 時間以内に無効になります。 organizationが 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 organizationの監査ログにイベントが記録されます[漏洩した個人用アクセス トークンを自動的に取り消す] ポリシーを無効にした場合を除き、漏洩した PAT は直ちに取り消されます。 漏洩したトークンを取り消し、新しいトークンに置き換えることで、影響を受けるユーザーに直ちに軽減することをお勧めします。

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

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 回で十分ですが、Azure Active Directory の構成によっては、それよりも頻繁にサインインする必要がある場合があります。 PAT が機能しなくなった場合は、最初にorganizationにサインインして、完全な認証プロンプトが表示されることを確認します。 その後も PAT が機能しない場合は、PAT の有効期限が切れているかどうかを確認チェック。