2

我创建了一个 Angular 应用程序,我必须在其中使用 Azure DevOps REST API 来检索票证详细信息。我正在使用@azure/msal-angular", "@azure/msal-browser" 包针对客户端 Azure-AD 对用户进行身份验证。

我正在使用这个文档,它说 URL 的语法应该类似于 GET https://dev.azure.com/{organization}/{project}/_apis/wit/workitems/{id}对我不起作用的东西

但是当我粘贴GET https://[ClientURL.com]/[resource/location]/_apis/wit/workitems?ids=123 到浏览器地址栏时,我得到 JSON 响应。

我正在使用令牌通过调用我的客户端 url 来使用 REST 服务,如下所示
GET https://[ClientURL.com]/[resource/location]/_apis/wit/workitems?ids=123

我正在拦截MsalInterceptor将添加身份验证标头的请求。

我收到一条错误消息Interceptor - acquireTokenSilent rejected with error. Invoking interaction to resolve.

我找不到任何足够好的 Angular 文档,并且无法理解我是否必须再次对 REST API 进行身份验证或 AD 身份验证应该没问题。

更新

该应用程序已经使用 C# 构建。我的客户希望它使用 Angular 开发。这是我的登录配置

export function MSALInstanceFactory(): IPublicClientApplication {
        return new PublicClientApplication({
            auth: {
                clientId: '' // my registered angular app clientId,
                authority: 'https://login.microsoftonline.com/my_tenentid',
                redirectUri: 'https://localhost:8080',
                
            },
            cache: {
              cacheLocation: 'localStorage'
            }
        })
        }
  

我正在使用 MSAL 对我的应用程序进行身份验证

loginMsal() {
  this.msalService.loginPopup().subscribe(
    (response: AuthenticationResult) => {
      this.loginSuccessfull(response)

    })
 }

需要帮忙!

4

1 回答 1

1

您需要检查您在 azure 门户中注册的应用程序是否已获得 Azure DevOps 的权限。请参阅以下步骤以授予 Azure DevOps 权限。

导航到已注册的应用程序门户-->管理下的API 权限--> 添加权限--> 选择Azure DevOps --> 选择委派权限--> 检查。user_impersonation

您可以添加您在 Authentication 标头中获得的访问令牌,如下例所示

var vstsApi = "https://dev.azure.com/{organization}/{project}/_apis/wit/workitems/{id}?api-version=6.1-preview.3"
var xhr = new XMLHttpRequest();
                
xhr.open('GET', vstsApi, true);
xhr.setRequestHeader('Authorization', 'Bearer ' + access_token);

有关详细信息,请参阅Javascript Web 应用程序示例

更新:

const tokenRequest = {
      scopes: [ "api://499b84ac-1321-427f-aa17-267ca6975798/.default" ]
 };

this.authService.instance.acquireTokenSilent(tokenRequest).then(tokenResponse => {
              
              var vstsApi = "https://dev.azure.com/myorg/myproje/_apis/wit/workitems/5?api-version=6.1-preview.3"
              var xhr = new XMLHttpRequest();
                
              xhr.open('GET', vstsApi, true);
              var res = xhr.setRequestHeader('Authorization', 'Bearer ' + tokenResponse.accessToken);
 })
于 2021-03-23T07:41:09.227 回答