1

В ядре Asp.Net cookie создается при настройке вашего приложения на app.UseSession(). По умолчанию cookie называется «.AspNetCore.Session». Его значение определяет сеанс, который будет использоваться. В настоящее время я сохраняю данные сеанса на сервере sql. Мне нужно узнать расшифрованное значение «.AspNetCore.Session», чтобы я мог искать сеанс в базе данных.Расшифровать «.AspNetCore.Session» файл cookie в ASP.NET Core

Есть ли способ расшифровать это значение? Я знаю, что ASP.NET должен как-то сделать это за кулисами.

+0

Интересно, если это тот же шифровать/дешифровать функциональность как Forms Security. Возможно, любое использование FormsAuthentication.Decrypt() может работать или, по крайней мере, стоит попробовать. –

+1

Это «IDataProtector», за которым следует base64-кодирование. Чтобы расшифровать, вам сначала нужно будет base64-декодировать в массив байтов, а затем применить часть этого: http://stackoverflow.com/a/37543433/1132334. «Секрет» - это эта часть: «CreateProtector (« Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware », ...)' – dlatikay

+0

Спасибо за руководство @dlatikay. Из ссылки, которую вы указали, что я поставил в C: \ mypath? –

ответ

2

У session source есть все, но вам необходимо знать это, ISessionStore и IDistributedSessionStore дает вам доступ к сеансу.

Вместо того, чтобы делать предположения о формате файла cookie, что мешает вам использовать API хранилища?

+0

ISessionStore имеет только один открытый элемент, который является методом Create. Итак, как использовать его для получения «SessionKey», который является ключом к таблице сервера sql, которая хранит данные сеанса? –

-1
private readonly IDataProtector _dataProtector; 


public DiscussionController(IDataProtectionProvider dataProtectionProvider) 
{ 
    _dataProtector = dataProtectionProvider.CreateProtector(nameof(SessionMiddleware)); 
} 

public ViewResult Index() 
{  

    string cookieValue; 
    HttpContext.Request.Cookies.TryGetValue(".AspNetCore.Session", out cookieValue); 

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

    var unprotectedData = _dataProtector.Unprotect(protectedData); 

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

Функция колодки от https://github.com/aspnet/Session/blob/dev/src/Microsoft.AspNetCore.Session/CookieProtection.cs

Смежные вопросы