我有一个用asp.net核心编写的web api,并使用Azure AD B2C进行身份验证 . 在浏览器中一切正常工作:具有[Authorize]属性的 endpoints 需要登录,因此浏览器将我重定向到Azure登录页面,在我登录后,我从api获得了答案 .

对于客户我正在构建一个UWP应用程序 . 我设法使用Microsoft.Identity.Client Nuget包获取访问令牌,但我无法使用令牌发送请求 . 我每次尝试时都会遇到异常(我不会在下面的客户端代码中抛出):

System.Runtime.InteropServices.COMException(0x80072F88):用户必须在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)的System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)中确认HTTP重定向请求 . 在System.Net.Http.HttpHandlerToFilter.d__4.MoveNext()---从抛出异常的上一个位置的堆栈跟踪结束---在System.Runtime的System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) . System.Net.Http.HttpClientHandler.d__86.MoveNext()中的CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)

如果我从 endpoints 中删除[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中完美地工作,但在此之后我无法对授权 endpoints 做任何事情 .

那么我应该如何将访问令牌附加到我的http请求以使用给定的方案正确授权?