如何为 Blazor 页面实现自定义授权过滤器

2023-11-25

Blazor 服务器端,.NET Core 3.1.x 查看有关授权的示例,我正在尝试获取自定义授权过滤器/属性的解决方案。我只需要在授权期间检查用户身份。

https://learn.microsoft.com/en-us/aspnet/core/security/blazor/?view=aspnetcore-3.1

在 Blazor 页面顶部,@page 之后

@attribute [MyAuthFilter]

过滤器。然而,OnAuthorization 永远不会受到影响。

public class MyAuthFilter: AuthorizeAttribute,IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationFilterContext context)
    {
        var httpContext = context.HttpContext;


        // get user name
        string userName = httpContext.User.Identity.Name;

        // todo - call method to check user access
        // check against list to see if access permitted
        //context.Result = new UnauthorizedResult();

    }
}

以下代码片段描述了如何执行授权过程,以及如何以及在何处为授权用户显示内容。您可以根据此处显示的代码构建自己的组件:

Profile.razor

@page "/profile"
@page "/profile/{id}"


<AuthorizeView Policy="CanEditProfile" Resource="@ID">
    <NotAuthorized>
       <h2 class="mt-5">You are not authorized to view this page</h2>
    </NotAuthorized>
<Authorized>
    <div class="container my-profile">
        <h2>My Profile</h2>
        --- Place here all the content you want your user to view ----
    </div>
 </Authorized>
</AuthorizeView>

@code {

    [Parameter]
    public string ID { get; set; }
}  

ProfileHandler.cs

public class ProfileHandler : IAuthorizationHandler
{
    public Task HandleAsync(AuthorizationHandlerContext context)
    {
        if (context.User != null)
        {
            var pendingRequirements = context.PendingRequirements.ToList();

            foreach (var requirement in pendingRequirements)
            {
                if (requirement is ProfileOwnerRequirement)
                {
                    // get profile id from resource, passed in from blazor 
                    //  page component
                    var resource = context.Resource?.ToString();
                    var hasParsed = int.TryParse(resource, out int 
                                                       profileID);
                    if (hasParsed)
                    {

                        if (IsOwner(context.User, profileID))
                        {
                            context.Succeed(requirement);
                        }
                    }
                }
            }

        }
        return Task.CompletedTask;
    }
    private bool IsOwner(ClaimsPrincipal user, int profileID)
    {
        // compare the requested memberId to the user's actual claim of 
        // memberId
        //  var isAuthorized = context.User.GetMemberIdClaim();
        // now we know if the user is authorized or not, and can act 
        // accordingly

        var _profileID = user.GetMemberIDClaim();


        return _profileID == profileID;
     }

 }

ProfileOwnerRequirement.cs

 public class ProfileOwnerRequirement : IAuthorizationRequirement
 {
    public ProfileOwnerRequirement() { }

 }

创业班

services.AddSingleton<IAuthorizationHandler, ProfileHandler>();

        services.AddAuthorization(config =>
        {
            config.AddPolicy("CanEditProfile", policy =>
                policy.Requirements.Add(new ProfileOwnerRequirement()));
        });

希望这可以帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为 Blazor 页面实现自定义授权过滤器 的相关文章

  • 使用可加载内核模块修改帧缓冲区(/dev/graphics/fb0)参数

    Problem 我必须配置 Android 平台使用的各种 LCD 显示器 几乎在所有情况下 都没有针对感兴趣的 LCD 显示器免费提供的电气规格 但通过经验和逆向工程 可以很好地猜测参数 我正在尝试使用可加载内核模块来微调显示参数 也欢迎
  • 为什么更新外键后引用约束会不一致?

    抱歉 这个模糊的标题很难用一句话来描述 我有 2 个实体User and UserAddress 其中 User 有 2 个外键DefaultInvoiceAddressId and DefaultDeliveryAddressId和 Us
  • 根据当前文化调用不同(本地化)视图

    我在用着LocalizationAttribute它实现了ActionFilterAttribute本地化视图 我简单地说 Localize 在控制器上 我使用 LocalizeStrings resx 文件根据当前线程上的语言进行应用 一
  • 我们可以在 C# 中定义枚举的隐式转换吗?

    是否可以在 C 中定义枚举的隐式转换 可以实现这一目标的东西吗 public enum MyEnum one 1 two 2 MyEnum number MyEnum one long i number 如果没有 为什么不呢 有一个解决方案
  • 获取当前用户的 NetworkCredential (C#)

    我正在尝试从控制台应用程序调用 Web 服务 并且我需要向客户端提供System Net NetworkCredential object 是否有可能创建一个NetworkCredential启动应用程序的用户的对象而不提示输入用户名 密码
  • 在 2 个 .c 文件之间共享函数

    dir1有dir2 file1 c和file1 h dir2 有 file2 c 现在 如果我想在 file2 c 中访问 file1 c 中定义的函数 我需要在 file1 h 中声明它并在 file2 c 中包含 file1 h 这是一
  • 多态性中基类缺少虚拟析构函数 = 资源泄漏?

    我们知道 如果要多态地使用基类 则需要将基类的析构函数指定为 virtual 否则程序中可能会出现资源泄漏 因为只会调用基类析构函数 而不会调用派生对象析构函数 我们还知道构造函数 析构函数纯粹是初始化 未初始化构造 而operator n
  • VS2010中VSHost.exe不断启动

    我正在 VS2010 中使用一个包含大量项目的解决方案 但它不断变得无响应 我注意到的一件事可能是一条线索 尽管我尚未开始任何调试 但 MyApplicationName vshost exe 不断出现在进程列表中 也许每当构建发生时它就会
  • MVVM 同步集合

    是否有一种标准化方法可以将 Model 对象集合与 C 和 WPF 中匹配的 ModelView 对象集合同步 我正在寻找某种类 可以使以下两个集合保持同步 假设我只有几个苹果 并且可以将它们全部保存在内存中 换句话说 我想确保如果我将 A
  • ASP.NET 中的 thread.sleep

    我正在为我的网站模拟彗星实时馈送协议 因此在我的控制器中我添加 while nothing new before timeout Thread Sleep 1000 但我注意到添加此功能后整个网站变慢了 调试后我得出结论 当我打电话时Thr
  • 如何在Windows Azure上调用ffmpeg.exe转换音频文件?

    我在 Windows Azure 上运行 Web 角色来接收 AAC 音频文件 通过 base64 字符串上传 并将它们存储到 blob 中 现在效果很好 接下来 我还必须将它们转换为 MP3 并将 MP3 存储到 blob 中 我决定使用
  • 剥离 OLE 标头信息 (MS Access / SQL Server)

    我有一个 C 应用程序需要支持二进制数据库内容 图像等 当使用 MS Access 或 MS SQL Server 时 此数据被包装在 OLE 对象内 如何去除此 OLE 标头信息 请注意 我不能只查找特定标签的开头 因为内容可以是 png
  • 合并大文件的最佳方法是什么?

    我必须合并数千个大文件 每个大约 200MB 我想知道合并这些文件的最佳方法是什么 行将有条件地复制到合并文件中 可以使用 File AppendAllLines 或使用 Stream CopyTo 吗 使用 File AppendAllL
  • 将 R 值传递给采用 L 值的函数时出现过载歧义

    我有 2 个重载函数 一个采用 L 值 另一个采用 R 值 目的是让该函数可以像这样调用 Obj obj foo obj OR foo Obj 所以 我写了2个重载函数 template
  • 矩阵行列式算法 C++

    我是编程新手 我一直在寻找一种找到矩阵行列式的方法 我在网上找到了这段代码 但我很难理解这里的算法 我对递归的基础没有问题 但继续和主循环我很难理解 非常感谢任何可以向我解释该算法的人 int determ int a MAX MAX in
  • 预览MouseMove 与 MouseMove

    我有相当多的 XAML 经验 但最近我注意到我的大多数同事都使用预览鼠标移动代替鼠标移动事件 我一直用鼠标移动它对我很有帮助 但我忍不住问我什么时候应该使用预览鼠标移动什么时候鼠标移动 有什么区别 各自有什么优点和缺点等等 PreviewM
  • 具有可导出私钥的证书的“错误密钥”例外

    我正在尝试使用非对称加密来加密然后解密文件 我已经使用 makecert 创建了一个测试证书并将其安装到我的个人本地计算机存储中 将来我必须在多个服务器上安装此证书 这就是为什么我使用 pe 标志创建它 即使用可导出的私钥 证书已成功创建并
  • 如何从与 C# lambda 集成(而非代理集成)的 Amazon API 网关获取正确的 http 状态代码?

    我正在使用 C lambda 与 API 网关集成 我希望 API 网关返回正确的错误代码 例如 400 404 500 等 API网关模块tf文件 provider aws version lt 2 70 0 region var aws
  • RC4 实现与 openssl 输出不匹配

    我的目标是在 C C 中实现 RC4 流密码 并确保它产生与使用时相同的输出openssl命令 按照伪代码维基百科 https en wikipedia org wiki RC4 该实现似乎有效 因为它可以加密和解密内容 但是 加密的输出与
  • 有关 Endian 性和 .Net 的详细信息?

    我有几个关于字节顺序的问题 这些问题足够相关 我保证将它们作为一个问题提出 1 字节顺序是由 Net还是由硬件决定的 2 如果是由硬件决定的 我怎样才能在C 中找出硬件的字节序 3 字节序是否影响二进制交互 例如 OR AND OR 或移位

随机推荐

  • cassandra将数据从一个列族复制到另一个列族

    我是卡桑德拉的新手 我需要将数据从一个columnFamily复制到cassandra中同一键空间中的另一个columnFamily 比如说 我们在键空间K1中有一个A1columnFamily 所以现在我需要在同一键空间K1中创建colu
  • DN 的 JavaScript 正则表达式

    我想要一个正则表达式来验证所有类型的可能 DN 我创建了一个 但效果不太好 A z0 9 1 A z0 9 1 and 其他一些改变它 但徒劳无功 可能的 DN 可以是 CN abcd CN abcd O abcd C us CN abcd
  • 获取函数调用者的范围

    我有一个函数在 ExtJS 第 1433 行的某个地方中断 var createDelayed function h o scope console log arguments logs undefined all round return
  • 使用 jfeinstein10 库的滑动菜单

    我创建了一个示例应用程序来测试滑动菜单的工作原理 下面的屏幕截图显示的是我现在得到的 但是 当我单击类别按钮 如下图所示 时 我应该会看到一个二级菜单 如下面 zomato 应用程序的屏幕截图所示 我怎样才能做到这一点 我是否以正确的方式进
  • pandas read_csv 删除空白行

    我正在读取 CSV 文件作为DataFrame同时定义每列的数据类型 如果 CSV 文件中有空行 此代码会出错 如何读取没有空白行的 CSV dtype material id object location id object time
  • Python标准库真的标准吗?

    Python 标准库是标准吗 如果安装了 Python 那么标准库也会安装吗 The 文档 reads 对于类 Unix 操作系统 Python 通常作为包的集合提供 因此可能需要使用操作系统提供的打包工具来获取部分或全部可选组件 标准库i
  • PHP 会话的安全性

    我知道这个问题已经被问了数十亿次 但我对我的编码安全性非常偏执 强迫症 我正在做一个小项目 会话数据将仅包含 user id 1 用户名我的用户名 登录 true csrf token87cc51ee94178df79cccce2aebc4
  • 在线程应用程序中准确计时一行代码,C#

    假设应用程序是多线程的 在 C 中对线程或一行代码进行计时的最准确方法是什么 亲切的问候 计时线程 到底是什么意思 要精确计算 以实际时间 某件事需要多长时间 请使用 System Diagnostics Stopwatch 我不相信有任何
  • PHP 中的动态常量名称

    我正在尝试动态创建一个常量名称 然后获取该值 define CONSTANT 1 Some value try to use it dynamically constant number 1 constant name CONSTANT c
  • 在 ASP.Net Boilerplate 中,从应用程序服务层调用 SignalR Hub 是一种不好的做法吗?

    我将 Asp Net 样板模板与 ASP Net Core 2 1 一起使用 我在 Web Core 程序集中实现了一个集线器并创建了一个控制器 我可以从任何客户端使用我的集线器订阅 通知数据 这不是我的问题 我想在应用程序服务层中使用此集
  • 如何解组 JSON?

    我正在尝试将 JSON 解组为结构 但是 该结构有一个带有标签的字段 使用反射 我尝试查看标签中是否包含字符串 json 如果是这样 那么要解组的 json 应该简单地作为字符串解组到字段中 Example const data I 3 S
  • 使用 jQuery 更新 flashvars 并重新加载 flash

    我想更新 flashvars 值参数以观看另一个视频
  • 我到底如何使用 nginx 和 Gunicorn 为 Django 应用程序提供静态文件服务器?

    现在 我正在尝试遵循本教程 http honza ca 2011 05 deploying django with nginx and gunicorn 模板网站加载正确 但图像未加载 这是我的应用程序的 config py 文件的一部分
  • Android - 激活系统键锁(又名锁屏)

    我必须激活android的系统键锁 当你按下关闭电源 hang up按钮 看这里 我已经浏览过文档 但我发现的一切都是电源管理器 and 键盘锁管理器 两者似乎都不是解决方案 那么 大家知道如何从 Android 应用程序中实现这一点吗 如
  • Javascript 事件处理程序存储在哪里?

    我试图弄清楚 DOM 如何跟踪事件处理程序 无论是通过使用 jQuery addEventListener 还是通过 HTML 属性 例如 onload myFunc 进行绑定 我读到 jQuery 使用 data 方式来存储 jQuery
  • 简单的 div onclick 显示 javascript

    当我点击任何链接时 相应的 div 就会出现 但是当我单击下一个链接时 新单击的潜水以及之前单击的潜水都会显示 我想隐藏之前的 div 新开发请有人帮助我 这是链接的 html 代码 a class hide href First Impr
  • 更改 VS code 中的 java.home 路径

    I just installed java 11 coz VS code was prompting me to update it to java 11 or newer version After installing java 14
  • 如何使用 TarsosDSP 获得 MFCC?

    我到处搜索 但不知道如何在 Android 上使用 TarsosDSP 提取 MFCC 特征 我知道如何从文件中获取 FFT 有什么帮助吗 查看官方github页面 MFCC 测试文件 public class MFCCTest priva
  • 人们对动态语言有何吸引力? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 Locked 这个问题及其
  • 如何为 Blazor 页面实现自定义授权过滤器

    Blazor 服务器端 NET Core 3 1 x 查看有关授权的示例 我正在尝试获取自定义授权过滤器 属性的解决方案 我只需要在授权期间检查用户身份 https learn microsoft com en us aspnet core