我有一个用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请求以使用给定的方案正确授权?