【问题标题】:Custom Authorize attribute without Identity and OWIN没有身份和 OWIN 的自定义授权属性
【发布时间】:2018-05-24 13:24:15
【问题描述】:

我想构造一个不调用 Identity 或 OWIN 的自定义授权属性。本质上,它应该有权访问的唯一内容是请求上下文以及告诉 MVC 框架继续处理请求或拒绝它的能力。

问题在 ASP.NET Core 2 中是否有一种简单的方法可以实现这一点?

一些想法 我对 ASP.NET Core 的理解是,它提供了一种使用不同中间件自定义请求管道的方法。我已经看到有一些特定的用于身份验证,但它们似乎都非常特定于 Identity。

使用不同类型的过滤器会更好吗?

【问题讨论】:

  • 不太确定您在寻找什么,因为这基本上已经是这种情况(至少部分如此)。授权中间件与身份完全分离。从技术上讲,OWIN 没有任何区别,因为这完全是 ASP.NET Core 的基础。然而,这在 Kestrel 中更是如此。
  • 我正在寻找一个示例,说明如何创建从 authorizeattribute 继承的属性,就像在 ASP.NET MVC(.NET 框架版本)中可以完成的一样。
  • 这并不是更清楚。我的意思是简单地说,它和以前一样。您只需创建一个新类,从 AuthorizeAttribute 继承并覆盖您想要的任何内容。也就是说,你真的不需要也可能不应该这样做。 ASP.NET Core 现在有基于策略的授权,这可能是你最好的解决方案:docs.microsoft.com/en-us/aspnet/core/security/authorization/…
  • 感谢您的链接!我认为主要问题是 ASP.NET Core 强制用户使用这种基于策略的新身份验证,这可能并不适用于所有情况,特别是如果您需要编写自定义身份验证和授权逻辑。
  • 这就是策略。这是自定义逻辑。基于策略的身份验证为您提供了一种简单的方法来做到这一点,而无需走不明智的路线,例如从 AuthorizeAttribute 派生。而且,这不是强迫的。这完全是可选的。每个组件都是完全可选的。

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


【解决方案1】:

答案有点晚,但仍然......“旧”的覆盖属性的方式随着 .Net Core 2.0 的回归,除了基类之外,您还必须实现 IAuthorizationFilter 接口:

[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public class CustomAuthorizeAttribute : AuthorizeAttribute, IAuthorizationFilter
{
    private readonly string _someFilterParameter;

    public CustomAuthorizeAttribute(string someFilterParameter)
    {
        _someFilterParameter = someFilterParameter;
    }


    public void OnAuthorization(AuthorizationFilterContext context)
    {
        // you can play with the context here 
    }
}

更多讨论here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 2015-08-22
    • 1970-01-01
    • 2011-07-01
    相关资源
    最近更新 更多