我正在编写一个使用ASP.NET Core作为后端的移动应用程序。为了进行用户身份验证,我首先考虑使用JWT。但是在我的案例中,JWT存在一些问题,例如在需要时使用户令牌无效。例如,如果用户的电话被盗,而他想退出所有设备。
我还发现有些文章也不建议不使用JWT进行会话。
您不能使单个JWT令牌无效
还有更多的安全问题。与会话不同-会话可以由服务器随时使之无效-各个无状态的JWT令牌不能无效。根据设计,无论发生什么情况,它们将一直有效到到期。这意味着,例如,您无法在检测到破坏后使攻击者的会话无效。当用户更改密码时,您也无法使旧会话无效。
http://cryto.net/~joepie91/blog/2016/06/13/stop-using-jwt-for-sessions/
所以我试图在asp.net核心中使用传统会话。 这是我正在使用的示例代码
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
有人知道在这种情况下我们能做什么吗?
答案 0 :(得分:0)
基本上,您可以在.net核心中使用 JwtSecurityTokenHandler()创建自己的jwt。创建后,您可以将创建的带有响应标头的jwt传递给客户端。客户端还将每个经过身份验证的请求标头的jwt发送到后端。 您可以通过过滤器或中间件类获得此jwt,并可以对其进行验证。
当我们使用基于令牌的身份验证时,我们将以这种方式实现。