我按照这篇文章
使用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的区别么?还是我的操作有问题?
查看context.HttpContext.User.Identity三,如果是系统内置的,比如登录进去了,这个IsAuthenticated肯定是 = true啊。你者上下文都没得,大家不好跟你猜。
自己去看这个的验证前后的值就行了,对比你就找到原因了。
用postman试过了,
如果直接get页面,context.HttpContext.User.Identity.IsAuthenticated的值是false。
但是我在Headers里增加Authorization和对应的票据。IsAuthenticated是ture