首页新闻找找看学习计划

Dotnet Core自定义全局过滤器[AllowAnonymous]标签无效

0
悬赏园豆:30 [已解决问题] 解决于 2018-01-04 11:15

我按照这篇文章

使用Identity Server 4建立Authorization Server

建立了IdentityServer服务器。

然后直接建了一个Web服务器,我没有使用文中提到的 [Authorize] 标签。自定义了一个认证筛选器。

    public class IdentityFilter : IAuthorizationFilter
    {
        public void OnAuthorization(AuthorizationFilterContext context)
        {if (!context.HttpContext.User.Identity.IsAuthenticated)
            {
                Console.WriteLine("need login");
            }
        }
    }

 

注册为全局筛选器,在ConfigureServices中添加

            services.AddMvc(option => {
                option.Filters.Add(typeof(IdentityFilter));
            });

 

筛选器可以正常过滤请求,控制台也能根据票据状态输出文字。

然后我新建了一个控制器,给控制器加上 [AllowAnonymous] 属性

    [AllowAnonymous]
    public class HomeController : Controller
    {
        public IActionResult Index()
        {
            return View();
        }
    }

 

感觉按照Framework套路应该这里就可以不用参与认证过滤

但是通过调试发现,这里依旧在输出文字。

 

请问,大神这个是Core和Framework的区别么?还是我的操作有问题?

写代码的相声演员的主页 写代码的相声演员 | 小虾三级 | 园豆:555
提问于:2017-11-10 16:37
< >
分享
最佳答案
0
写代码的相声演员 | 小虾三级 |园豆:555 | 2018-01-04 11:15
其他回答(1)
0

查看context.HttpContext.User.Identity三,如果是系统内置的,比如登录进去了,这个IsAuthenticated肯定是 = true啊。你者上下文都没得,大家不好跟你猜。

自己去看这个的验证前后的值就行了,对比你就找到原因了。

收获园豆:30
花飘水流兮 | 园豆:10746 (专家六级) | 2017-11-10 16:43

用postman试过了,

如果直接get页面,context.HttpContext.User.Identity.IsAuthenticated的值是false。

但是我在Headers里增加Authorization和对应的票据。IsAuthenticated是ture

支持(0) 反对(0) 写代码的相声演员 | 园豆:555 (小虾三级) | 2017-11-10 16:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册