【问题标题】:Can "Blazor (ASP.NET Core hostd)" use windows authentication?“Blazor(ASP.NET Core 托管)”可以使用 Windows 身份验证吗?
【发布时间】:2019-11-30 02:59:59
【问题描述】:

我正在开发一个 Blazor(ASP.NET Core 托管)项目并托管在 IIS 上。

当年我用 ASP.NET core 2.2 with razor page,它可以使用windows认证。

但是对于 dotnet core 3.0,只有 Blazor 服务器端项目模板有 Windows 身份验证选项可供选择。

但是 Blazor(ASP.NET Core 托管)项目模板呢?据我了解,它就像 Blazor 客户端 + dotnet core MVC 后端。 我不明白为什么没有“Windows 身份验证”选项。

【问题讨论】:

    标签: asp.net .net-core blazor


    【解决方案1】:

    有 2 个问题需要解决。

    对于 web 程序集,使用带有 AuthenticationStateProvider 的解决方案来获得用户身份验证,并调用返回 windows 用户名和授权角色的 api(启用 windows 身份验证并禁用匿名登录)(如果您使用它们进行授权) .将角色作为声明加载到客户端身份中,并设置 Web 程序集以进行身份​​验证和授权。

    由于所有代码都在 webassembly 中运行,因此您还应该使用授权属性保护服务器端 api 控制器操作,但将用户标识到 wasm 的调用除外。

    在服务器 api 上启用身份验证和授权,并使用 IClaimsTransformation 修改经过身份验证的用户的声明。 正确配置后,您也可以在控制器上使用授权属性,从而保护 api。

    您可以在两侧实现 StateContainers 来缓存用户信息,这样您就不必读取数据库以获取每个操作的相同信息。我为此使用单例,保留时间为 5 分钟。然后,您可以更新每次缓存读取的时间戳,这样您就可以有效地只调用一次数据库。

    【讨论】:

    • 很好的建议;您能否提供一些链接,以便人们可以阅读有关 AuthenticationStateProvider、IClaimsTransformation、StateContainers 等主题的更多信息?
    【解决方案2】:

    这是一个多步骤的过程,基本大纲如下。我找到的最佳指南来自Chrissanity

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

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

    3. 在 .razor 文件中,使用 [CascadingParameter] private Task<AuthenticationState> authenticationStateTask { get; set; } 将值读入组件。

    【讨论】:

      【解决方案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中的源代码示例。

      【讨论】:

        【解决方案4】:

        根据asp.net core github,我认为它会在以后的版本中包含这个功能

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-08-16
          • 2019-10-08
          • 2021-10-18
          • 2021-06-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-04
          相关资源
          最近更新 更多