是没有身份会话的asp.net核心Cookie身份验证无状态是或否?

时间:2018-02-02 19:09:15

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

我一直在寻找很多教程,并且他们总是说asp.net Core cookie authentication用户在具有会话ID的Session对象中在服务器端保持身份验证。但是在CookieAuthenticationHandler.cs SignInAsync中仅在Options.SessionStore存在时保存sessionId,如果不是这种情况,我认为在每个请求中都发送所有加密的声明而无需将所有数据存储到{ {1}}(与令牌身份验证一样)。所以,有人可以向我澄清一下。

CookieAuthenticationHandler.cs源代码;

Session object

3 个答案:

答案 0 :(得分:0)

CookieAuthentication可以在没有启用Session的情况下正常工作。

所有声明都被序列化到cookie中,并在每次请求时由Authentication中间件反序列化为ClaimsPrinicpal。

因此,如果您指的是无状态,因为不需要会话状态,是的,状态在cookie中,随每个请求传递。

答案 1 :(得分:0)

没有

要证明这一点,请创建一个新应用。注册新用户。删除数据库并重新创建它。当您返回到应用程序时,您将被视为仍然经过身份验证。

如果有的话,cookie只是用作超出会话的缓存。与任何缓存一样,您必须检查它是否过时,这意味着在客户端和服务器之间同步状态。

而且,正如Phil Karlton所说,计算机科学中只有两件难事:缓存失效和命名事物。

实现无国籍状态应被视为目标,而不是宗教任务。

答案 2 :(得分:0)

默认情况下,没有安装Session,它是无状态的。

一个简单的测试来证明它:

  • 通过CookieAuthentication / SignIn将cookie返回给您的客户端
  • 将cookie值保存在某处
  • 然后注销(服务器返回SetCookie以重置身份验证cookie的值)
  • 重用1中获得的值向客户端发送请求。
  • 尽管处于“退出”阶段,您仍将通过身份验证!如果默认情况下具有适当的服务器端会话机制,则该cookie将变得无效,因为该会话将被破坏并且服务器将无法将该cookie与该会话进行匹配。