【问题标题】:How can I read Session ID from request header or url in ASP.NET Core?如何从 ASP.NET Core 中的请求标头或 url 读取会话 ID?
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

    • 嗯,有趣.. 存在 jwt 承载方案,但没有普通承载方案。
    猜你喜欢
    • 1970-01-01
    • 2014-04-03
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 2012-03-12
    • 2011-08-03
    • 2020-06-06
    相关资源
    最近更新 更多