개인용 액세스 토큰 사용

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

PAT(개인용 액세스 토큰)를 대체 암호로 사용하여 Azure DevOps에 인증할 수 있습니다. 이 문서에서는 Azure DevOps에 대한 PAT를 만들고, 사용하고, 수정하고, 해지하는 방법을 보여 줍니다.

다음 비디오에서는 PAT를 만들고 사용하는 방법을 보여줍니다.

PAT 정보

개인용 액세스 토큰에는 Azure DevOps에 대한 보안 자격 증명이 포함됩니다. PAT는 사용자, 사용자의 액세스 가능한 조직 및 액세스 범위를 식별합니다. 따라서 암호만큼 중요하므로 동일한 방식으로 취급해야 합니다.

Microsoft 도구 내에서 작업하는 경우 MSA(Microsoft 계정) 또는 Microsoft Entra ID가 허용되고 잘 지원되는 방법입니다. 그러나 Microsoft 또는 Microsoft Entra 계정을 지원하지 않는 타사 도구로 작업하거나 도구에 기본 자격 증명을 제공하지 않으려는 경우 PAT를 사용하여 위험을 제한합니다.

다음 방법 중 하나를 통해 PAT를 만들고 관리할 수 있습니다.

Microsoft 이외의 도구에 대한 PAT를 설정하려면 Git 자격 증명 관리자를 사용하거나 수동으로 만듭니다. 올바른 인증 메커니즘을 선택하는 데 도움이 되도록 인증 지침을 검토하는 것이 좋습니다. 덜 강력한 솔루션이 필요한 소규모 프로젝트의 경우 PAT가 간단한 대안입니다. 사용자가 자격 증명 관리자를 사용하지 않는 한 매번 자격 증명을 입력해야 합니다.

PAT 만들기

  1. 조직에 로그인합니다(https://dev.azure.com/{yourorganization}).

  2. 홈페이지에서 사용자 설정 를 연 다음 개인용 액세스 토큰을 선택합니다.

    선택 항목, 개인용 액세스 토큰을 보여 주는 스크린샷

  3. + 새 토큰을 선택합니다.

    선택 영역, 새 토큰을 보여 주는 스크린샷

  4. 토큰 이름을 지정하고, 토큰을 사용할 조직을 선택한 다음, 설정된 일 수 후에 토큰이 자동으로 만료되도록 설정합니다.

    기본 토큰 정보의 항목을 보여 주는 스크린샷.

  5. 이 토큰의 범위를 선택하여 특정 작업에 대한 권한을 부여합니다.

    예를 들어 빌드 및 릴리스 에이전트가 Azure DevOps Services에 인증할 수 있도록 토큰을 만들려면 토큰의 범위를 에이전트 풀로 제한합니다(읽기 및 관리). 감사 로그 이벤트를 읽고 스트림을 관리 및 삭제하려면 감사 로그 읽기를 선택한 다음 만들기를 선택합니다.

    PAT에 대해 선택한 범위를 보여 주는 스크린샷

    참고 항목

    전체 범위의 PAT 만들기가 제한될 수 있습니다. 그렇다면 Microsoft Entra ID의 Azure DevOps 관리자가 특정 사용자 지정 범위 집합으로 사용자를 제한하는 정책을 사용하도록 설정했습니다. 자세한 내용은 정책을 사용하여 PAT 관리/전체 범위의 PAT 만들기 제한을 참조 하세요. 사용자 지정 정의 PAT의 경우 구성 요소 거버넌스 API vso.governance에 액세스하는 데 필요한 범위는 UI에서 선택할 수 없습니다.

  6. 완료되면 토큰을 복사하여 안전한 위치에 저장합니다. 보안을 위해 다시 표시되지 않습니다.

    토큰을 클립보드에 복사하는 방법을 보여 주는 스크린샷

Warning

PAT는 암호처럼 처리 및 사용하고 비밀을 유지합니다.

Azure DevOps에서 인증을 위해 사용자 자격 증명이 필요한 모든 곳에서 PAT를 사용합니다.

Important

Microsoft Entra ID로 지원되는 조직의 경우 새 PAT로 로그인하는 데 90일이 걸리는데, 그렇지 않으면 비활성으로 간주됩니다. 자세한 내용은 조건부 액세스에 대한 사용자 로그인 빈도를 참조 하세요.

알림

사용자는 PAT의 수명 동안 두 개의 알림을 받습니다. 하나는 만들 때, 다른 하나는 만료되기 7일 전입니다.

PAT를 만든 후 다음 예제와 유사한 알림을 받게 됩니다. 이 알림은 PAT가 조직에 추가되었음을 확인합니다.

PAT 생성 알림을 보여 주는 스크린샷.

다음 이미지는 PAT가 만료되기 전의 7일 알림의 예를 보여 줍니다.

만료 알림 근처 PAT를 보여 주는 스크린샷.

자세한 내용은 SMTP 서버 구성 및 경고 및 피드백 요청에 대한 전자 메일 사용자 지정을 참조 하세요.

예기치 않은 알림

예기치 않은 PAT 알림이 수신되면 관리자 또는 도구가 사용자를 대신하여 PAT를 만들었을 수 있습니다. 다음 예를 참조하세요.

  • git.exe 통해 Azure DevOps Git 리포지토리에 연결하는 경우 "git: https://MyOrganization.visualstudio.com/ on MyMachine"과 같은 표시 이름을 가진 토큰을 만듭니다.
  • 사용자 또는 관리자가 Azure 앱 Service 웹앱 배포를 설정하면 "서비스 후크: Azure 앱 서비스: : 웹앱 배포"와 같은 표시 이름으로 토큰을 만듭니다.
  • 사용자 또는 관리자가 파이프라인의 일부로 웹 부하 테스트를 설정하는 경우 "WebAppLoadTestCDIntToken"과 같은 표시 이름으로 토큰을 만듭니다.
  • Microsoft Teams 통합 메시징 확장이 설정되면 "Microsoft Teams 통합"과 같은 표시 이름으로 토큰을 만듭니다.

Warning

PAT가 오류가 있다고 생각되면 PAT를 해지하는 것이 좋습니다. 그런 다음 암호를 변경합니다. Microsoft Entra 사용자는 관리자와 검사 조직이 알 수 없는 원본 또는 위치에서 사용되었는지 확인합니다. PAT에서 퍼블릭 GitHub 리포지토리에 실수로 검사 대한 FAQ도 참조하세요.

PAT 사용

PAT는 사용자의 ID이며 암호처럼 사용할 때 사용자 ID를 나타냅니다.

Git

Git 상호 작용에는 빈 문자열을 제외한 모든 항목이 될 수 있는 사용자 이름이 필요합니다. HTTP 기본 인증에 PAT를 사용하려면 다음 코드 블록에 $MyPat포함된 PAT를 사용합니다Base64-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 자격 증명 관리자를 사용하는 것이 좋습니다. 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를 사용하는 방법에 대한 자세한 내용 및 예제는 다음 문서를 참조하세요.

PAT 수정

PAT를 다시 생성하거나 확장하고 해당 범위를 수정할 수 있습니다. 다시 생성한 후에는 이전 PAT에 더 이상 권한이 부여되지 않습니다.

  1. 홈페이지에서 사용자 설정을 연 다음 프로필을 선택합니다.

    PAT를 수정하기 위해 선택할 단추 시퀀스를 보여 주는 스크린샷

  2. 보안에서 개인 액세스 토큰을 선택합니다. 수정할 토큰을 선택한 다음 편집합니다.

    PAT를 수정하는 강조 표시된 편집 단추를 보여 주는 스크린샷

  3. 토큰 이름, 토큰 만료 또는 토큰과 연결된 액세스 범위를 편집한 다음 저장을 선택합니다.

    수정된 PAT를 보여 주는 스크린샷

PAT 해지

다양한 이유로 언제든지 PAT를 해지할 수 있습니다.

  1. 홈페이지에서 사용자 설정을 연 다음 프로필을 선택합니다.

    선택할 단추 시퀀스, Team Services, 미리 보기 페이지 및 PAT 해지 스크린샷

  2. 보안에서 개인 액세스 토큰을 선택합니다. 액세스를 취소할 토큰을 선택한 다음, 해지(Revoke)를 선택합니다.

    단일 토큰 또는 모든 토큰을 해지하기 위한 선택을 보여 주는 스크린샷

  3. 확인 대화 상자에서 취소를 선택합니다.

    PAT를 해지하는 확인 화면을 보여 주는 스크린샷

FAQ

Q: 사용자 계정을 사용하지 않도록 설정하면 PAT는 어떻게 되나요?

A: 사용자가 Azure DevOps에서 제거되면 PAT는 1시간 이내에 무효화됩니다. 조직이 Microsoft Entra ID에 연결된 경우 PAT는 사용자에 속하기 때문에 Microsoft Entra ID에서도 무효화됩니다. 서비스를 계속 실행하려면 사용자가 PAT를 다른 사용자 또는 서비스 계정으로 회전하는 것이 좋습니다.

Q: REST API를 통해 PAT를 갱신하는 방법이 있나요?

A: 예, PAT 수명 주기 관리 API를 사용하여 PAT를 갱신, 관리 및 만드는 방법이 있습니다. 자세한 내용은 REST APIFAQ를 사용하여 PAT 관리를 참조하세요.

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 해지(Revoke)를 참조 하세요.

Q: 개인 액세스 토큰을 ApiKey로 사용하여 dotnet/nuget.exe 명령줄을 사용하여 Azure Artifacts 피드에 NuGet 패키지를 게시할 수 있나요?

A: 아니요. Azure Artifacts는 개인용 액세스 토큰을 ApiKey로 전달하는 것을 지원하지 않습니다. 로컬 개발 환경을 사용하는 경우 Azure Artifacts 자격 증명 공급자를 설치하여 Azure Artifacts로 인증하는 것이 좋습니다. 자세한 내용은 dotnet, NuGet.exe 예제를 참조하세요. Azure Pipelines를 사용하여 패키지를 게시하려면 NuGet 인증 작업을 사용하여 피드 예제를 사용하여 인증합니다.

Q: PAT 작동이 중단된 이유는 무엇인가요?

A: PAT 인증을 사용하려면 전체 인증 흐름을 사용하여 Azure DevOps에 정기적으로 로그인해야 합니다. 30일마다 한 번만으로도 충분하지만 Microsoft Entra 구성에 따라 로그인하는 것보다 더 자주 로그인해야 할 수도 있습니다. PAT가 작동을 중지하는 경우 먼저 조직에 로그인하여 전체 인증 프롬프트를 통과하도록 합니다. 그 후에도 PAT가 여전히 작동하지 않는 경우 PAT가 만료되었는지 확인하는 검사.