我正在开发Blazor(由ASP.NET Core托管)项目,并托管在IIS上。
当我将ASP.NET Core 2.2与剃须刀页面一起使用时,它可以使用Windows身份验证。
但是对于dotnet core 3.0,只有Blazor服务器端项目模板具有Windows身份验证选项可供选择。
但是Blazor(托管ASP.NET Core)项目模板又如何呢?据我了解,它就像Blazor客户端+ dotnet核心MVC后端。 我不明白为什么没有“ Windows身份验证”选项。
答案 0 :(得分:3)
在Blazor WebAssembly应用中,用户身份验证和授权必须由后端Web Api处理,因为所有客户端代码都可以由用户修改。
您的ASP.NET Core Api可以使用Windows身份验证,并在cookie中跟踪身份验证状态。在Blazor WebAssembly中,您可以实现一个AuthenticationStateProvider
来调用您的Web Api以获取有关用户身份验证状态的详细信息。
然后,您可以根据用户的登录状态使用AuthorizeView
组件显示或隐藏内容。
您可以在Blazor Prepare for Authorization
中找到清晰的说明https://github.com/Forestbrook/BlazorAuthorizationExample中的源代码示例。
答案 1 :(得分:0)
我认为它将根据asp.net core github
在更高版本中包含此功能。答案 2 :(得分:0)
这是一个多步骤过程,基本概述如下。我发现的最佳指南来自Chrissanity。
在服务器上获取当前的Windows用户,并使用Blazored.LocalStorage nuget软件包将其存储在cookie中。
在ApiAuthenticationStateProvider.cs客户端上读取该cookie
在.razor文件中,使用[CascadingParameter] private Task<AuthenticationState>
authenticationStateTask { get; set; }
将值读入组件。
答案 3 :(得分:0)
有两个问题需要解决。
对于 webassembly,使用带有 AuthenticationStateProvider 的解决方案来获取用户身份验证并调用返回 Windows 用户名和授权角色的 api(启用 Windows 身份验证并禁用匿名登录),如果您使用它们进行授权.将角色作为声明加载到客户端身份中,并设置 webassembly 以进行身份验证和授权。
因为所有代码都在 webassembly 中运行,您还应该使用授权属性保护服务器端 api 控制器操作,除了向 wasm 标识用户的调用。
在服务器 api 上启用身份验证和授权,并使用 IClaimsTransformation 修改经过身份验证的用户的声明。 正确配置后,您也可以在控制器上使用授权属性,以保护 api。
您可以在两侧实现 StateContainers 来缓存用户信息,这样您就不必为每个操作读取相同的信息的数据库。我为此使用了单例,保留时间为 5 分钟。然后,您可以在每次缓存读取时更新时间戳,这样您就可以有效地只调用一次数据库。
答案 4 :(得分:-1)
回顾当我将ASP.NET Core 2.2与剃刀页一起使用时,它可以使用 Windows身份验证。
Razor Page 是Razor Pages(而不是Blazor)世界中的一个概念。
但是对于dotnet core 3.0,仅Blazor服务器端项目模板 有Windows身份验证选项可供选择。
完全正确。您不能在客户端Blazor中使用Windows身份验证,但是可以在服务器端Blazor中使用它。
您最好在github中问最后一个问题,以便Blazor团队可以为您提供有根据的答案...
答案 5 :(得分:-1)
就像Blazor客户端+ dotnet核心MVC后端一样。
是的。但这意味着虽然可以对后端进行身份验证,但没有(直接/简单)方式将其链接到Blazor应用程序的用户。
后端身份验证不是那么有用,它已经在服务帐户下运行。