首页 > 解决方案 > .Net Core - 使用 AzureAD 身份验证访问 Azure DevOps REST API

问题描述

我正在编写一个 Blazor Web 应用程序来从 Azure DevOps 中提取管道数据。到目前为止,我一直在使用 PAT 进行访问,但我希望用户能够使用他们的 Azure AD 帐户而不是 PAT 进行访问。我已经通过 Microsoft.AspNetCore.Authentication.AzureAD.UI 库添加了 Azure AD 身份验证,因此您必须使用您的 Azure AD 帐户登录才能访问该站点,这很有效。

现在我已经让他们登录了,我想将该登录名用于用于调用 REST API 的 VssConnection。目前我正在使用这样的个人访问令牌:

VssCredentials vssCredentials = new VssBasicCredential(string.Empty, PAT);
VssConnection vssConnection = new VssConnection(new Uri($"https://dev.azure.com/{Org}"), vssCredentials);

如何更改它以利用他们正在使用的 Azure AD 登录名,这样他们就不需要提供 PAT?

更新

我想我真的很接近这一点。我在 Github 上找到了一个名为Microsoft.Identity.Web的库,它似乎可以满足我的要求。我想我只是在努力理解如何使用正确的范围进行调用。所以在我的创业公司中,我现在拥有:

services.AddMicrosoftIdentityPlatformAuthentication(Configuration)
                .AddMsal(Configuration, scopes)
                .AddInMemoryTokenCaches();

其中“范围”是一个字符串数组。后来我有:

string token = await _tokenAcquisition.GetAccessTokenOnBehalfOfUserAsync(scopes);

其中 _tokenAcquisition 是来自 Microsoft.Identity.Web 的 ITokenAcquisition。同样,范围是一个字符串数组。我不确定我应该为这两个调用使用什么范围。在 Azure 门户中的应用程序注册中,我有

申请注册

那么我在 Startup 中的调用使用什么范围,以及稍后在调用中使用什么来获取令牌?我已经尝试了很多选项,我什至不能全部提及。有些在启动时调用失败。有些在令牌获取中失败。有些人一直通过,然后告诉我我无法访问 dev.azure.com。任何帮助将不胜感激。

标签: c#.net-coreazure-devopsazure-active-directoryblazor-server-side

解决方案


目前,Azure DevOps 不为 Asp.net Core Web 应用提供 OAuth 库。您可以参考以下链接中的退出身份验证示例:

选择正确的身份验证机制

但是,我们可以按照Authorize access to REST APIs with OAuth 2.0 自己实现 OAuth 2.0。您需要在网页上放置一个登录按钮,并通过您为 Azure DevOps 注册的应用程序编写授权请求,并处理响应并获取访问令牌。之后,您可以使用令牌调用 Azure DevOps REST。

Azure DevOps 的 OAuth 与使用 Azure AD 的身份验证不同,它是由 Azure DevOps 直接提供的单独 OAuth。下面是 Azure DevOps 和 Azure AD 之间不同的授权和令牌 url:

Azure DevOps ( OAuth 2.0 )

授权网址: https ://app.vssps.visualstudio.com/oauth2/authorize

访问令牌 URL: https ://app.vssps.visualstudio.com/oauth2/token

Azure ADOAuth 代码授予流程

授权网址: https ://login.microsoftonline.com/ {tenant}/oauth2/authorize

访问令牌 URL: https ://login.microsoftonline.com/ {tenant}/oauth2/token

如果您喜欢 Microsoft 为 Asp.net Core 提供身份验证库和代码示例,我建议您投票并留下您对来自 Asp.Net Core 应用程序 (3.0) 的 DevOps 的 oAuth的反馈。


推荐阅读