【发布时间】:2019-06-02 04:34:52
【问题描述】:
我正在编写一个使用 ASP.NET Core 作为后端的移动应用程序。对于用户身份验证,我最初考虑使用 JWT。但就我而言,JWT 存在一些问题,例如在需要时使用户令牌无效。例如,如果用户的手机被盗,他想从所有设备上退出。
另外我发现有些文章也不推荐不使用 JWT 进行会话。
您不能使单个 JWT 令牌无效
还有更多的安全问题。与会话不同 - 服务器可以随时使会话失效 - 单个无状态 JWT 令牌不能失效。按照设计,无论发生什么,它们都将在到期之前一直有效。例如,这意味着您不能在检测到入侵后使攻击者的会话无效。当用户更改密码时,您也不能使旧会话无效。
http://cryto.net/~joepie91/blog/2016/06/13/stop-using-jwt-for-sessions/
所以我尝试在 asp.net core 中使用传统会话
这是我正在使用的示例代码
services.AddDistributedMemoryCache();
services.AddSession(options =>
{
// Set a short timeout for easy testing.
options.IdleTimeout = TimeSpan.FromSeconds(10);
options.Cookie.HttpOnly = true;
// Make the session cookie essential
options.Cookie.IsEssential = true;
});
问题在于 asp.net 核心仅使用 cookie 来存储会话 ID。在移动应用程序中,我们不能使用 cookie。相反,我们可以在请求标头或 url 参数中传递会话 ID。像这样
https://localhost/users/6?sessionid=abcdefg...xyz
有人知道在这种情况下我们可以做什么吗?
【问题讨论】:
标签: c# asp.net-core .net-core