asp.net-core - .Net core 3.1 自定义认证
问题描述
我编写了一个 .Net 核心 API,而我的 API 本身没有任何身份验证或授权逻辑。身份验证和授权由单独的系统处理,因此为了保护我的端点,我需要将每个传入请求转发到外部系统,并根据从外部系统返回的值决定用户是否经过身份验证。
我想知道实现此类事情的最佳方法是什么,因为我认为可以使用CustomAuthorize
属性或middleware
添加CustomAuthPolicy
. 使用 .Net 核心进行身份验证有很多零碎的东西,如果有人能指导我朝着正确的方向前进,我将不胜感激。
解决方案
这是我目前正在使用的解决方案:
此解决方案效果很好,如果您在引用的项目中有以下内容,则可以轻松重用它。
创建自定义属性:
[AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
public class MyAuthAttr : ActionFilterAttribute
{
//Add Auth logic here using HttpClient or whatever you use to authenticate.
//You can access your headers through actionContext.HttpContext.Request.Headers
//When completed with your logic, you can continue your controller execution
base.OnActionExecuting(actionContext);
}
此属性可以像这样应用于您的控制器:
[MyAuthAttr]
public class MySecureControllerController {...}
这可以作为全局身份验证应用于控制器的类,或者作为特定身份验证应用于控制器内的任何端点。
所以这也可以:
[Route("Do")]
[MyAuthAttr]
public IActionResult DoThaThing(Foo foo) {...}
推荐阅读
- reactjs - 不正确的数组索引正在删除 react/redux
- listview - Flutter ListView 在每次调用 setState() 时跳到顶部
- c# - Linq 找到下面发生的事情 - 搜索
- r - 使用 R 中的 ggpubr 包修改构面标签
- java - GCP 数据流:Log4J StackOverflowError 又名 Java 类路径操作
- ssl - 如何将 SSL 证书分配给作为 kubernetes 服务的负载均衡器的区域 ip
- ruby-on-rails - 无法安装 bootsnap 版本 1.4.4
- c++ - 我需要帮助调整代码以计算出 3x3 矩阵并显示单位矩阵?
- c# - 当包中只有 2 个项目时,处理 ConcurrentBag 显示超过 5000 个任务
- python - 如何将每分钟数据的表转换为每小时数据的表?