“ Blazor(托管ASP.NET Core)”可以使用Windows身份验证吗?

时间:2019-07-22 07:17:19

标签: asp.net .net-core blazor

我正在开发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身份验证”选项。

6 个答案:

答案 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

  1. 在服务器上获取当前的Windows用户,并使用Blazored.LocalStorage nuget软件包将其存储在cookie中。

  2. 在ApiAuthenticationStateProvider.cs客户端上读取该cookie

  3. 在.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应用程序的用户。

后端身份验证不是那么有用,它已经在服务帐户下运行。