[Authorize] 属性如何知道用户在 ASP.NET MVC 中进行了身份验证,是使用身份验证令牌吗?

San*_*tra 1 asp.net-mvc

我想知道[Authorize]属性如何识别此用户已通过身份验证?

如果用户是有效的,那么我们调用FormsAuthentication.SetAuthCookie()方法,根据 MSDN 这个方法:

为提供的用户名创建身份验证票,并将其添加到响应的 cookie 集合中,如果您使用的是无 cookie 身份验证,则添加到 URL。

[Authorize] 属性是检查身份验证票还是 cookie 集合?

Eri*_*sch 6

[Authorize]本身不处理任何身份验证机制。它只是在用户中IIdentity寻找IsAuthenticated标志。它还将在 usersIsMemberOf方法中查找基于角色的授权。

解码身份验证票的所有工作都是在应用程序管道的早期阶段完成的,这会设置这些标志。到调用授权属性方法时,所有工作都已完成并存储在用户运行时数据中。

您可以轻松查看 Authorize 属性的源代码,您会发现它本质上非常简单。它只是根据一些简单的查找返回 true 或 false。

它在 .net core 中变得更加复杂,它基于策略而不是什么,但原始 MVC 实现非常简单。