【问题标题】:Custom Authorize filter with aspnet core使用 aspnet 核心自定义授权过滤器
【发布时间】:2016-12-23 00:01:47
【问题描述】:

您好,我正在尝试创建一个自定义授权过滤器,它允许我自动授权来自 localhost 的请求(将用于我的测试)。

我为 Asp.net 找到了以下一个,但是在将其移植到 asp.net 核心时遇到了问题。

public class MyAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        if (httpContext.Request.Url.IsLoopback)
        {
            // It was a local request => authorize the guy
            return true;
        }

        return base.AuthorizeCore(httpContext);
    }
}

如何将它移植到 asp.net core?

【问题讨论】:

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


    【解决方案1】:

    您可以创建一个中间件,您可以在其中自动授权来自本地主机的请求。

    public class MyAuthorize
    {
       private readonly RequestDelegate _next;
       public MyAuthorize(RequestDelegate next)
       {
          _next = next;
       }
    
       public async Task Invoke(HttpContext httpContext)
       {
         // authorize request source here.
    
        await _next(httpContext);
       }
    }
    

    然后创建一个扩展方法

    public static class CustomMiddleware
    {
            public static IApplicationBuilder UseMyAuthorize(this IApplicationBuilder builder)
            {
                return builder.UseMiddleware<MyAuthorize>();
            }
    }
    

    最后在startupConfigure方法中添加。

    app.UseMyAuthorize();
    

    Asp.Net Core 没有 IsLoopback 属性。这是解决此问题的方法 https://stackoverflow.com/a/41242493/2337983

    您还可以在此处阅读有关Middleware 的更多信息

    【讨论】:

    • 使用中间件进行身份验证/授权的问题是它无法遵守 [AllowAnonymous] 属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多