我的任务是开发一个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。