使用 C# 创建 Azure DevOPS 个人访问令牌 (PAT)

Creating an Azure DevOPS Personal Access Token (PAT) using C#

我正在尝试使用 TokensHttpClient 中的新功能创建 PAT。但是我不断收到授权异常。我正在使用我的 Microsoft 帐户,它是一个组织管理员。

        VssCredentials creds = new VssClientCredentials();
        creds.Storage = new VssClientCredentialStorage();

        // Connect to Azure DevOps Services
        VssConnection connection = new VssConnection(_uri, creds);
        connection.ConnectAsync().SyncResult();
        var t = connection.GetClient<TokenAdminHttpClient>();

       //next line works as expected
        var tokens = t.ListPersonalAccessTokensAsync(connection.AuthorizedIdentity.SubjectDescriptor).Result; 

        var tokenAdmin = connection.GetClient<TokensHttpClient>();
        PatTokenCreateRequest createRequest = new PatTokenCreateRequest();
        createRequest.DisplayName = "Niks_Api_Token";
        createRequest.Scope = "vso.work_full";
        createRequest.ValidTo = DateTime.Now.AddYears(1);
        //this is where authorization exception occurs
        var result = tokenAdmin.CreatePatAsync(createRequest).Result;

要使用 APIs 管理个人访问令牌,您必须使用 Azure AD 令牌 进行身份验证。 Azure AD 令牌是一种比使用 PAT 更安全的身份验证机制。鉴于此 API 创建和撤销 PAT 的能力,我们希望确保仅向允许的用户提供如此强大的功能。

请在此处检查先决条件。

  1. 确保您的组织已连接到 AAD,请参阅 here

  2. 请在 Azure AD 中注册一个应用程序,确保已创建客户端密钥。可以参考这个doc。并添加 Azure DevOps 的权限。

  3. 获取 Azure AD 访问令牌的示例代码。

     public static async Task<string> GetAccessTokenAsyncByClientCredential()
     {
         IConfidentialClientApplication cca = ConfidentialClientApplicationBuilder.Create(<appId/clientId>)
            .WithTenantId(<tenantId>)
            .WithClientSecret(<clientSecret>)
            .Build(); 
    
          string[] scopes = new string[] { "499b84ac-1321-427f-aa17-267ca6975798/.default" };
    
         var result = await cca.AcquireTokenForClient(scopes).ExecuteAsync();
    
         return result.AccessToken;
     }