У меня есть веб-API, написанный в ядре asp.net, и использующий Azure AD B2C для аутентификации.В браузере все работает отлично: конечные точки с атрибутом [Authorize] требуют входа в систему, поэтому браузер перенаправляет меня на страницу входа в Azure, и после того, как я вошел в систему, я получил ответ от API.
Для клиента я создаю приложение UWP.Мне удалось получить токен доступа с помощью пакета Nuget Microsoft.Identity.Client, но я не могу отправить запрос с использованием токена.Каждый раз, когда я пытаюсь получить, я получаю исключение (я не брошен в коде клиента ниже):
System.Runtime.InteropServices.COMException (0x80072F88): запрос перенаправления HTTP должен быть подтвержденпользователь в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (задача-задача) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (задача-задача) в System.Net.Http.HttpHandlerTxtMозаключение_трандгрузоваиз предыдущего места, где было сгенерировано исключение --- в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (задача-задача) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (задача-задача) в System.Net.Http.Hent_HTDHTHT()
Если я удаляю атрибут [Autherize] из конечной точки, он работает просто отлично.
Мой код на стороне сервера:
Startup.cs ->ConfigureServices:
services.AddAuthentication(sharedOptions =>
{
sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
sharedOptions.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddAzureAdB2C(options => { Configuration.Bind("AzureAdB2C", options); })
.AddCookie();
Итак, я использую схему аутентификации Cookie.Но с клиента я не могу правильно прикрепить токен доступа.
Мой код клиента:
var httpClient = new HttpClient();
HttpResponseMessage response;
try
{
var request = new HttpRequestMessage(HttpMethod.Delete, uri);
request.Headers.Add("Cookie", ".AspNetCore.Cookies=" + token);
//request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
response = await httpClient.SendAsync(request);
if (response.StatusCode != System.Net.HttpStatusCode.NoContent)
{
throw new Exception();
}
}
catch (Exception ex)
{
throw new Exception();
}
Имя входа отлично работает и в UWP, но после этого я ничего не могу сделать с Авторизованными конечными точками.
Так какя должен прикрепить токен доступа к моему http-запросу для правильной авторизации, используя данную схему?