.ASPXROLES членские роли истекает cookie - PullRequest
0 голосов
/ 16 ноября 2010

Использование ASP.NET 2.0 с аутентификацией форм. Просто для теста я настроил cookie ролей в web.config так:

<roleManager enabled="true" cacheRolesInCookie="true" cookieName=".ASPXROLES" cookieTimeout="2"></roleManager>

Я хотел посмотреть, что произойдет, когда истечет срок действия кэшированных файлов cookie роли. Используя Fiddler, по прошествии 2 минут я мог видеть, что значение файла cookie роли изменилось.

Я ожидал, что по истечении этого срока ASP.NET просто перечитает информацию о ролях из базы данных и снова заполнит файл cookie тем же значением. Итак, мой вопрос: почему бы значение файла cookie изменилось после истечения срока его действия? Значение cookie не читается человеком (кодируется и / или зашифровывается в формате base64?), Поэтому я не могу сказать, совпадает ли информация в нем, хотя приложение все еще работает нормально

РЕДАКТИРОВАТЬ:

Похоже, что каждый раз, когда роли шифруются и кэшируются в файле cookie, он получает другое необработанное значение.

например. если вы запустите следующий код:

    RolePrincipal rp = (RolePrincipal) User;
    string str = rp.ToEncryptedTicket();
    Label1.Text = str;

Вы получаете разные значения каждый раз. Так что поведение кажется нормальным.

1 Ответ

1 голос
/ 16 ноября 2010

Что ж, cookie aspxroles относится только к ролевым запросам пользователя.Если вы не делаете что-то с ролями, которые заставили бы его функционировать по-другому (web.config auth?), То вы ничего не увидите, если истечет срок действия куки.

Можете ли вы поделиться своими web.config и основными страницами, которые вы используете для проверки этого?

Вы пробовали эту конкретную конфигурацию, чтобы увидеть, что изменится после истечения срока действия?

<location path="img/logo.png">
    <system.web>
        <authorization>
            <deny users="?"/>
            <allow roles="CanSeeLogo"/>
        </authorization>
    </system.web>
</location>

Основано на вопросе edit:

В моем web.config под<configuration><system.web> У меня есть этот ключ:

<machineKey decryption="AES" decryptionKey="{64bits random hex}" validation="SHA1" validationKey="{128 bits random hex}"/>

Мне любопытно, если вы установите это «вручную», если у вас будет постоянно изменяющаяся зашифрованная строка.Кроме того, это устанавливается по умолчанию в ваших папках C: \ Windows \ Microsoft.Net \ Framework \ etc, но вы можете переопределить его (очевидно) в файле web.config, чтобы переопределить его для каждого приложения.Это также позволяет вам совместно использовать одно и то же кросс-приложение cookie в вашем домене.

Ссылка для генерации случайных шестнадцатеричных строк

https://www.grc.com/passwords.htm

, конкататация первого результата из двух страницобновляет для второго.Удаление ключа web.config позже не окажет негативного влияния на ваше приложение (конечно, не повлияет)

...