0

我正在尝试使用 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;
4

1 回答 1

0

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

请在此处检查先决条件。

在此处输入图像描述

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

  2. 请在 Azure AD 中注册应用程序,确保已创建客户端密码。你可以参考这个文档。并添加 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;
     }
    
于 2021-09-24T07:57:14.533 回答