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

Decrypt ".AspNetCore.Session" cookie in ASP.NET Core

在 Asp.Net 核心中,当您将应用配置为 app.UseSession() 时会创建一个 cookie。 默认情况下,cookie 名为“.AspNetCore.Session”。它的值标识要使用的会话。目前,我将会话数据保存在 sql 服务器上。我需要知道“.AspNetCore.Session”的解密值,以便我可以在数据库中查找会话。

有没有办法解密这个值?我知道 ASP.NET 必须以某种方式在幕后进行。

session source has everything, but you should need to know it, ISessionStore and IDistributedSessionStore 给你一个会话密钥。

不是假设 cookie 格式,是什么阻止您使用商店 API?

我不得不从 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