Windows身份验证使用Blazor与.net Core WebApi



我的任务是开发一个Blazor Webassembly应用程序。该应用程序仅在公司网络内使用,出于安全原因,我们希望使用现有的AD和NTLM身份验证。

到目前为止,我有一个最小的Blazor应用程序配置和运行在IIS。它被配置为使用Windows身份验证,到目前为止是有效的。当我在浏览器中打开应用程序时,我被要求提供凭据。该应用程序还应该与。net core webapi通信,这也是由windows身份验证保护的。这个webapi安全性也可以正常工作。当我在浏览器中打开它的URL时,我被要求提供我的凭据,页面加载。

现在的问题:当我调用相同的url(在浏览器中工作)从我的Blazor应用程序与HttpClient。我得到一个"401:未授权"错误。即使应用本身是用相同的身份验证加载的。有什么我必须要做的吗?MSDN文档太大了,我找不到解决方案。

在ConfigureServices()中的WebApi Startup.cs中,我添加了
services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.AddAuthorization();

和Configure()

app.UseCors(x => x.AllowAnyMethod().AllowAnyHeader().SetIsOriginAllowed(origin => true).AllowCredentials());
app.UseAuthentication();
app.UseAuthorization();

PS:Blazor应用程序使用。net Core 3.1WebApi使用。net 5.0

我建议检查Blazor WebAssembly额外的安全场景(所有的例子都在那里)

要授权你的请求,你可以使用HttpClient和BaseAddressAuthorizationMessageHandler:

builder.Services.AddHttpClient("ServerAPI", 
client => client.BaseAddress = new Uri("https://www.example.com/base"))
.AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>();

BaseAddressAuthorizationMessageHandler将自动为所有传出请求添加授权头。

注意:这只适用于Blazor Wasm,不适用于Server。

最新更新