如何从ASP.NET Core中的请求标头或URL中读取会话ID?

时间:2019-06-02 04:34:52

标签: c# asp.net-core .net-core

我正在编写一个使用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

有人知道在这种情况下我们能做什么吗?

1 个答案:

答案 0 :(得分:0)

基本上,您可以在.net核心中使用 JwtSecurityTokenHandler()创建自己的jwt。创建后,您可以将创建的带有响应标头的jwt传递给客户端。客户端还将每个经过身份验证的请求标头的jwt发送到后端。 您可以通过过滤器或中间件类获得此jwt,并可以对其进行验证。

当我们使用基于令牌的身份验证时,我们将以这种方式实现。

相关问题