【问题标题】:Calling Azure DevOps REST API in a daemon app or long-running task在守护程序应用或长时间运行的任务中调用 Azure DevOps REST API
【发布时间】:2019-01-09 06:18:50
【问题描述】:

我正在编写 Azure WebJob(长时间运行的任务)以务实地创建 WorkItems。我创建了 Azure AD App (SPN) 并在 API 权限下添加了 Visual Studio Team Services。我创建了控制台应用程序来测试 API,这里是获取令牌和调用 DevOps API 的代码

static async Task RunAsync()
{
    AuthenticationContext authContext = new AuthenticationContext(authority); // https://login.microsoftonline.com/{tanent}
    ClientCredential clientCredential = new ClientCredential(clientId, appKey); // Azure APP ID and Key
    AuthenticationResult result = await authContext.AcquireTokenAsync(resourceId, clientCredential); // 499b84ac-1321-427f-aa17-267ca6975798

    httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);

    HttpResponseMessage response = await httpClient.GetAsync(baseAddress + "/_apis/wit/workitemtypes?api-version=5.1-preview.2"); // https://dev.azure.com/{org}/{project}

    if (response.IsSuccessStatusCode)
    {
        string s = await response.Content.ReadAsStringAsync();
        Console.WriteLine(s);
    }
}

我收到标题为“Azure DevOps Services | 登录”的 HTML 输出,而不是 JSON 响应(工作项类型列表)。由于它是后台进程,我无法要求用户提示登录。我可以这样做吗?是否支持?

【问题讨论】:

    标签: azure-devops azure-active-directory


    【解决方案1】:

    您使用的是 Azure DevOps REST API 的默认身份验证,它使用的是 OAuth 2.0 身份验证模型。

    如果您需要从 Azure DevOps 登录中消除回调和 OAuth 身份验证,请改用 Azure DevOps PAT(个人访问令牌)。

    为将调用 API 的帐户创建 PAT,并根据以下 Microsoft 官方文档调整调用 REST API 的代码: Create Azure DevOps Personal Access Token

    【讨论】:

    • 有没有不使用PAT的访问方式,我们可以使用SPN来实现吗?
    • @leox 你在问不同的问题。请提交新问题,而不是在评论中提问。
    【解决方案2】:

    我可以这样做吗?支持吗?

    简短的回答是

    在需要 Azure Devops 服务的权限时,我们会发现不支持应用程序权限,唯一的方法是委托权限。需要登录用户。有关 Azure AD 权限类型的详细信息,请参阅此document

    委派权限 - 由存在登录用户的应用使用。对于这些应用程序,用户或管理员同意应用程序请求的权限,并且该应用程序被委派了在调用 API 时充当登录用户的权限。根据 API,用户可能无法直接同意 API,而是需要管理员提供“管理员同意”。

    正如 Eriawan Kusumawardhono 提到的,您可以使用 PAT 方式调用 Azure DevOps REST API。更多信息,您可以参考这个document

    【讨论】:

      猜你喜欢
      • 2018-09-24
      • 1970-01-01
      • 2016-10-07
      • 2021-07-17
      • 1970-01-01
      • 2012-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多