【问题标题】:.Net core 3.1 custom authentication.Net core 3.1 自定义认证
【发布时间】:2021-05-02 13:05:44
【问题描述】:

我编写了一个 .Net 核心 API,而我的 API 本身没有任何身份验证或授权逻辑。身份验证和授权由单独的系统处理,因此为了保护我的端点,我需要将每个传入请求转发到外部系统,并根据从外部系统返回的值决定用户是否经过身份验证。

我想知道实现这样的最佳方法是什么,因为我认为可以使用CustomAuthorize 属性或middleware 或添加CustomAuthPolicy 来完成。 Auth with .Net core 有很多零碎的东西,如果有人能指导我朝着正确的方向前进,我将不胜感激。

【问题讨论】:

    标签: asp.net-core authentication .net-core


    【解决方案1】:

    这是我目前正在使用的解决方案:

    此解决方案效果很好,如果您在引用的项目中有以下内容,则可以轻松重复使用。

    创建自定义属性:

    [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) {...}
    

    【讨论】:

    • 关于此的另一个很酷的事情是,您可以向属性添加属性以允许匿名身份验证或类似的事情。您还可以使用相同的模式来创建属性来验证权限等其他内容。
    猜你喜欢
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多