.Net Core — используйте аутентификацию AzureAD/EntraID для доступа к REST API Azure DevOpsC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 .Net Core — используйте аутентификацию AzureAD/EntraID для доступа к REST API Azure DevOps

Сообщение Anonymous »

У меня есть размещенное приложение Blazor WebAssembly, в котором я пытаюсь получить данные из Azure DevOps. В настоящее время мы используем PAT для доступа, но я хочу, чтобы люди вместо этого использовали свою учетную запись Entra ID.
Я выполнил шаги, описанные здесь, чтобы настроить аутентификацию с помощью Entra ID, поэтому я могу войти в систему
p>
https://learn.microsoft.com/en-us/aspne ... etcore-7.0
В настоящее время у меня возникли проблемы с получением действительного токена доступа для вызова Azure DevOps и получения некоторых данных.
Я постоянно получаю код состояния: 203, фразу причины: «Неавторитетная информация».
Если бы это было 401, я бы предположил, что проблема в конфигурации моего приложения. Однако это 203, поэтому я подозреваю, что формат токена может быть неправильным. Возвращаемый токен имеет формат JWT, а не обычный формат PAT, поэтому я не знаю, как действовать.
Ниже приведен код моего клиентского приложения

Program.cs

using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.Components.WebAssembly.Authentication;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using testauthblazor.Client;
using testauthblazor.Client.Services;

var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add("#app");
builder.RootComponents.Add("head::after");

builder.Services.AddHttpClient("testauthblazor.ServerAPI", client => client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress))
.AddHttpMessageHandler();

// Supply HttpClient instances that include access tokens when making requests to the server project
builder.Services.AddScoped(sp => sp.GetRequiredService().CreateClient("testauthblazor.ServerAPI"));
builder.Services.AddScoped();

builder.Services.AddMsalAuthentication(options =>
{
builder.Configuration.Bind("AzureAd", options.ProviderOptions.Authentication);
options.ProviderOptions.DefaultAccessTokenScopes.Add("https://twonline.onmicrosoft.com/xxxx-x ... x/.default");
});
await builder.Build().RunAsync();


TestPage.razor

@page "/testpage"
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@using testauthblazor.Client.Services
@inject AzureDevOpsService DevOpsService
@inject IAccessTokenProvider TokenProvider

Azure DevOps Projects

@if (projects == null)
{
Loading...
}
else if (projects.Count == 0)
{
No projects found.
}
else
{
  • @foreach (var project in projects)
    {
  • @project
    }
}

@code {
private List projects;

protected override async Task OnInitializedAsync()
{
var result = await TokenProvider.RequestAccessToken();
if (result.TryGetToken(out var token))
{
projects = await DevOpsService.GetProjectsAsync(token.Value);
}
}
}


AzureDevOpsService.cs

public class AzureDevOpsService(HttpClient httpClient)
{
private readonly HttpClient _httpClient = httpClient;

public async Task GetProjectsAsync(string accessToken)
{
var request = new HttpRequestMessage(HttpMethod.Get, "https://dev.azure.com/wtwcrb/_apis/proj ... ersion=7.1");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

var response = await _httpClient.SendAsync(request);
response.EnsureSuccessStatusCode();

var content = await response.Content.ReadAsStringAsync();
var projects = JsonDocument.Parse(content).RootElement.GetProperty("value").EnumerateArray()
.Select(p => p.GetProperty("name").GetString()).ToList();

return projects;
}
}


Подробнее здесь: https://stackoverflow.com/questions/792 ... -rest-apis
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»