【问题标题】:Blazor Authentication via existing database table通过现有数据库表进行 Blazor 身份验证
【发布时间】:2022-01-18 04:59:01
【问题描述】:

我想构建一个具有用户身份验证的 Blazor 服务器应用程序。我对 Blazor 的唯一体验是一个简单的工作应用程序,它使用 AD 身份验证并进行各种 api 调用以获取必要的数据。

我有一个现有的 sql 表,其中包含:userId、username、permissionLevel

基本上,我希望能够使用用户名和哈希密码创建一个新表,当匹配时将返回一个包含用户 ID、用户名和权限级别的对象,该对象将用于 Blazor 服务器应用程序中的身份验证。

这可能吗?是否有任何资源可以为我指明正确的方向?我已经搜索过,但没有找到任何我想要的东西。我正在寻找如何根据 PermissionLevel 显示某些选项的示例。

【问题讨论】:

    标签: blazor-server-side


    【解决方案1】:

    Blazor 服务器支持基于策略的授权 (https://docs.microsoft.com/en-us/aspnet/core/blazor/security/?view=aspnetcore-6.0#authorize-attribute) - 示例:

    @page "/"
    @attribute [Authorize(Policy = "PermissionLevel.5")]
    
    <p>You can only see this if you satisfy the 'PermissionLevel.5' policy.</p>
    

    您可以在 Startup.cs 中注册所有策略(PermissionLevels),例如:

       services.AddAuthorization(options =>
                {
                    options.AddPolicy("PermissionLevel.5",
                        policy => policy.RequireClaim("Permission", "PermissionLevel.5"));
                });
    

    与基于角色的授权不同,在任何Authorize 属性或AuthorizeView 组件中只能应用一个策略。但是,您可以通过自定义您自己的 AuthorizationHandler 来评估单个策略的多个要求(例如 PermissionLevel 是否必须为 '5' 或更高)(有关一些好的示例,请参阅 MS Docs:https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies?view=aspnetcore-6.0#use-a-handler-for-multiple-requirements - 您也可以参考我下面的最后一个链接有关使用角色声明的详细示例,@pacificcoder)。

    如果您使用 ASP.NET 身份(例如使用 Blazor 项目的个人用户帐户),则会为您创建 AspNetUserClaims 表(请参阅https://docs.microsoft.com/en-us/aspnet/core/security/authentication/customize-identity-model?view=aspnetcore-6.0#entity-types),其中包含所有用户声明对。可以在运行时使用UserManager.AddClaimAsync() 将声明分配给用户。

    如果您没有很多声明,这就足够了 - 但是用户拥有的权限和角色越多,访问令牌就越大(并且您可能会收到“访问令牌不能超过 4K”错误 - 我在向角色添加 5 个以上声明后开始获得此功能,但不确定仅使用用户声明超过 4K 有多容易......)。

    如果您考虑使用基于策略的授权,我建议您查看@pacificoder 的这个答案:https://stackoverflow.com/a/49539930/13678817 - 虽然这与基于角色的策略有关,但同样的方法可以用于基于用户的策略,我还喜欢使用枚举创建和添加所有权限/策略的方式。

    【讨论】:

      猜你喜欢
      • 2021-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-01
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      相关资源
      最近更新 更多