我有一个用asp.net核心编写的web api,并使用Azure AD B2C进行身份验证。浏览器中的一切工作正常:带有[Authorize]属性的端点需要登录,因此浏览器会将我重定向到Azure登录页面,在我登录后,我从api得到了答案。
对于客户我正在建立一个UWP应用程序。我设法使用Microsoft.Identity.Client Nuget包获取访问令牌,但我无法使用令牌发送请求。我每次尝试都会遇到异常(我在下面的客户端代码中抛出):
System.Runtime.InteropServices.COMException(0x80072F88):HTTP 重定向请求必须由用户确认 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务) System.Net.Http.HttpHandlerToFilter.d__4.MoveNext()---结束 抛出异常的先前位置的堆栈跟踪--- 在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在System.Net.Http.HttpClientHandler.d__86.MoveNext()
如果我从端点中删除[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请求以使用给定的方案正确授权?