.NET Core API 中的自定义授权过滤器

2023-12-05

我想在使用我的核心 api 访问任何数据之前对用户进行授权,所以我尝试使用 JWT 身份验证。 我在使用 api 登录用户时成功生成了令牌,并将该令牌保存在会话中的客户端,现在每当用户想要使用 api 访问任何数据时,我都会将该令牌在标头中发送到 api,并且我想验证该 JWT 令牌使用自定义授权过滤器。我已经创建了自定义授权过滤器并将其应用到我的 GetMenu api 上,并且我能够成功验证该令牌,但在授权过滤器中进行令牌验证后,它不会在我的 GetMenu api 上命中它。

这是我的 AccountController 代码:

[Filters.Authorization]
[AllowAnonymous]
[HttpPost]
[Route("GetMenu")]
public IActionResult GetMenu(string clientid, int rolecode, string repcode)
{
    //further process
}

这是我的 Filters.Authorization 代码:

public class Authorization: AuthorizeAttribute, IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationFilterContext filterContext)
    {
        if (!ValidateToken(filterContext.HttpContext.Request.Headers["token"]))
        {
            filterContext.Result = new UnauthorizedResult();
        }
    }
}

我在 OnAuthorization 方法和 GetMenu api 上有断点。 我通过邮递员调用我的 GetMenu api 进行测试,它成功地在 Filters.Authorization 中的 OnAuthorization 方法上命中它并验证我的 JWT 令牌并在邮递员中显示状态代码:200,但在成功令牌验证后,它应该在 GetMenu api 上命中以进行进一步的操作正在处理数据,但没有命中。 可能是什么问题?我缺少什么?请帮忙。


您不应该设置filterContext.Result如果请求成功授权。

//
// Summary:
//     A context for authorization filters i.e. Microsoft.AspNetCore.Mvc.Filters.IAuthorizationFilter
//     and Microsoft.AspNetCore.Mvc.Filters.IAsyncAuthorizationFilter implementations.
public class AuthorizationFilterContext : FilterContext
{
    //
    // Summary:
    //     Gets or sets the result of the request. Setting Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext.Result
    //     to a non-null value inside an authorization filter will short-circuit the remainder
    //     of the filter pipeline.
    public virtual IActionResult Result { get; set; }
}

你只需要设置Result当它失败的时候。

public class Authorization: AuthorizeAttribute, IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationFilterContext filterContext)
    {
        if (!ValidateToken(filterContext.HttpContext.Request.Headers["token"]))
        {
            filterContext.Result = new UnauthorizedResult();
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET Core API 中的自定义授权过滤器 的相关文章

随机推荐

  • 仅替换第一次出现的字符串?

    我有这样的事情 text This text is very very long replace words very word for word in replace words text text replace very not ve
  • 徽标而不是应用程序标题 闪亮

    我怎样才能在闪亮的应用程序中放置而不是标题 navbarPage title theme shinytheme flatly tabPanel Home 菜单选项卡大小中有一些标志吗 我尝试了这个解决方案 如何将图像插入到闪亮的 navba
  • ITextPdf:从右到左打印阿拉伯字符串(RTL)

    我在java上使用iTextpdf来生成带盖章的PDF 有时生成的PDF是阿拉伯语的 我面临一个有趣的问题 为了让阿拉伯语页面从右到左 RTL 创建 我使用具有以下属性的表格和单元格PdfPCell setRunDirection PdfW
  • 通过客户端脚本更改时访问服务器端只读文本框值的解决方法

    我在网格视图的每一行都有一个日期文本框 由于不允许用户在文本框中输入自己的值 因此我们将该属性设置为 ReadOnly true 并提供了一个日历java脚本插件来设置Textbox值 现在 当我尝试在保存单击时访问日期文本框时 文本框值不
  • j2me - 内存不足异常,它与最大堆或 jar 大小有什么关系吗?

    我目前正在开发一个用于接受订单的应用程序 在提出问题之前 让我向您介绍我的应用程序基本功能的一些详细信息 用户登录后 应用程序要做的第一件事就是从网络服务读取数据 产品 价格和客户 以便用户可以离线工作 一旦用户获得了所有必要的数据 他们就
  • 将连接的单词串分解为单个单词的快速方法

    假设我有这个字符串 hellohowareyou 有没有一种快速的方法将其分成单独的单词 所以最终结果是hello how are you 我可以想到几种方法 但它们会非常慢 首先我需要根据字典识别每个字母 看看哪些字母组成一个单词 并且可
  • 如果提交消息以给定字符串开头,则忽略 Jenkins 作业

    如果提交消息以给定字符串开头 我想忽略运行 Jenkins 作业 我尝试添加 其他行为 和 轮询忽略某些消息的提交 IE 如果提交消息以 doc 开头 我想忽略该作业 在我的世界中这意味着不运行该作业 我已经尝试了几个在线正则表达式匹配器
  • 如何将 SQL 与 PHP 分开?

    遵循鲍勃叔叔的建议干净的代码 我希望我的 PHP 代码中没有 SQL 目前 我正在使用准备好的语句 并将数据库访问代码分解到模型类中 我最初的想法是将 SQL 分解为单独的 SQL 文件 然后在运行时加载它们 由于这涉及更多的磁盘 IO 我
  • 如何在 ASP.NET Core 中启用 CORS

    我正在尝试在 ASP NET Core Web API 上启用跨源资源共享 但我陷入困境 The EnableCors属性接受policyName类型的string作为参数 Summary Creates a new instance of
  • next.js npm 模块注释给出错误

    这是我的错误 10 03 56 049 components navbar js 10 03 56 049 13 33 Warning img elements must have an alt prop either with meani
  • C++ 类何时在堆栈上实例化?

    我想澄清一下在堆栈上实例化类时会发生什么 当 C 类在堆上实例化时 MyClass myclass new MyClass 创建 MyClass 类型的指针 并通过 new MyClass 在同一行实例化该类 像这样拉伸它 MyClass
  • 使用 GDK 在 Google Glass 上接收 UDP 数据

    对于从 Google Glass 上运行的应用程序接收 UDP 数据有什么建议吗 我需要与现有系统集成 该系统向本地子网进行 UDP 广播 Glass 将位于同一子网中 并且在 Glass 上运行的应用程序只需侦听端口上的 UDP 数据包
  • 无法找到 EL RI 表达式工厂

    我在我的应用程序中遇到以下异常 com sun faces config ConfigurationException 看来JSP版本的 容器早于 2 1 并且无法 定位 EL RI 表达式 工厂 com sun el E xpressio
  • vue如何从子组件访问v-model

    我的孩子组件是这样的
  • PHP 一秒发送多个号码短信请求

    我正在尝试使用 API 发送短信 它几乎每秒发送一条短信 但我想在一秒钟内使用 PHP 中的多线程 pthreads 发送多条短信 这怎么可能 或者我怎样才能至少从我的一端异步发送多个短信请求到API服务器 Threads Class cl
  • Matlab 中 IFFT 的缩放问题

    我正在 Matlab 中研究 IFFT 将其应用于高斯 根据维基百科表 傅里叶变换对将是 F w sqrt pi a exp w 2 4a 频率 以及 f t exp at 2 及时 我修改了代码上一个问题加上 Cris Luengo 执行
  • PHP 在字符串中动态引用变量

    我的表单中有多个 PHP 变量 number1 number2 number3 and so on 我想在循环内部动态引用它们以从中检索信息 但不确定如何动态引用静态变量 前任 for i 1 i lt 10 i The first num
  • 如何在 MS Access 2007 或 MS SQL Server 2005 中通过 SQL 将字段转换为行

    我有一个旧的 MS Access 2007 表 其中包含 52 个字段 一年中的每周 1 个字段 代表历史销售数据 加上实际年份的一个字段 我想将此数据库转换为更传统的时间 值列表 有谁知道如何在不编写带有 52 个以上显式参数的查询的情况
  • Net::SSH 与非 UNIX/Linux 主机?

    我正在尝试使用 Net SSH 库来登录和管理支持 ssh 的主机 TL1 是一种电信设备 我似乎能够成功登录 但是当我尝试 ssh exec 某些内容时 它会中止并表示无法执行命令 这是我的简单代码 require net ssh Net
  • .NET Core API 中的自定义授权过滤器

    我想在使用我的核心 api 访问任何数据之前对用户进行授权 所以我尝试使用 JWT 身份验证 我在使用 api 登录用户时成功生成了令牌 并将该令牌保存在会话中的客户端 现在每当用户想要使用 api 访问任何数据时 我都会将该令牌在标头中发