Asp.net core azure b2c cookie-аутентификация на клиенте - PullRequest
0 голосов
/ 04 июня 2018

У меня есть веб-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-запросу для правильной авторизации, используя данную схему?

...