在ASP.NET Core中解密“.AspNetCore.Session”cookie

5
在Asp.Net Core中,当你配置app.UseSession()时,会创建一个cookie。默认情况下,该cookie被称为".AspNetCore.Session"。它的值用于标识要使用的会话。目前,我将我的会话数据保存在SQL服务器上。我需要知道".AspNetCore.Session"的解密值,以便可以在数据库中查找会话。
有没有一种方法可以解密这个值?我知道ASP.NET必须以某种方式在后台进行解密。

我想知道它是否与表单安全性中的加密/解密功能相同。也许FormsAuthentication.Decrypt()使用的内容可能有效,或者值得一试。 - Ross Bush
3
这是一个由 IDataProtector 和 base64 编码组成的内容。要解密,你需要先将其进行 base64 解码成字节数组,然后应用这部分代码:https://dev59.com/j5ffa4cB1Zd3GeqP9o1M#37543433。其中的“秘密”在于这一部分:`CreateProtector("Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware", ...)`。 - Cee McSharpface
感谢@dlatikay的指引。从您提供的链接中,我应该把什么放在C:\mypath中? - John-Luke Laue
2个回答

3

ISessionStore 只定义了一个公共成员,即 Create 方法。那么如何使用它来获取“SessionKey”呢?“SessionKey”是存储会话数据的 SQL Server 表的键。 - RonC

3
我不得不从Microsoft.AspNetCore.Session中提取私有的Pad函数,但我成功地得到了我需要的内容:
public class DiscussionController : Controller
{   
    private readonly IDataProtector _dataProtector;        

    public DiscussionController(IDataProtectionProvider dataProtectionProvider)
    {
        var protectorPurpose = "whatever purpose you want";

        _dataProtector = dataProtectionProvider.CreateProtector(protectorPurpose);
    }

    public IActionResult Index()
    {     
       HttpContext.Request.Cookies.TryGetValue(".AspNetCore.Session", out string cookieValue);

       var protectedData = Convert.FromBase64String(Pad(cookieValue));

       var unprotectedData = _dataProtector.Unprotect(protectedData);

       var humanReadableData = System.Text.Encoding.UTF8.GetString(unprotectedData);

        return Ok();
    }

    private string Pad(string text)
    {
        var padding = 3 - ((text.Length + 3) % 4);
        if (padding == 0)
        {
            return text;
        }
        return text + new string('=', padding);
    }    
}

Pad函数取自:https://github.com/aspnet/AspNetCore/blob/87629bbad906e9507026692904b6bcb5021cdd33/src/Middleware/Session/src/CookieProtection.cs#L61-L69


感谢您的建设性评论@LeoGurdian。链接和代码已经更新。 - John-Luke Laue

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接