Запомнить меня с DotNetOpenId в ASP.NET MVC - PullRequest
13 голосов
/ 20 апреля 2009

Использование DotNetOpenAuth 3 в ASP.NET MVC и реализация средства RememberMe ...

Я обнаружил, что даже если я установил для createPersistentCookie значение true в FormsAuthentication.RedirectFromLoginPage и FormsAuthentication.SetAuthCookie, пользователь не запоминается после истечения времени сеанса ASP.NET .

Если я проверю файл cookie, то обнаружу, что он помечен как постоянный и в будущем срок его действия истекает, я полагаю, потому что я установил время ожидания FORMS для web.config на несколько лет. В любом случае, если пользователь закрывает браузер и снова открывает его, он запоминается правильно - до тех пор, пока время сеанса ASP не истекло.

Более старый пост Скотта Хансельмана заставляет меня задуматься, не потому ли это, что FormsAuthentication пытается обновить билет аутентификации и, возможно, в модели OpenId, которая не работает, но я установил FORMS SlidingExpiration = "false" в web.config и в любом случае я подумал, что принудительное использование постоянных cookie сделает эти вещи неактуальными.

Мне также интересно, почему в примере DotNetOpenId MVC нет флажка RememberMe - может быть, в этом есть что-то хитрое?

С другой стороны, здесь, в StackOverflow, я вижу, что меня автоматически запоминают через сеансы. Интересно, использовали ли они что-то кроме DotNetOpenId для аутентификации OpenId.

Кто-нибудь еще успешно выполнял RememberMe с DotNetOpenId в ASP.NET MVC? Какие-нибудь хитрости?

[Update]

Спасибо за попытку помочь, Эндрю. Оказывается, речь шла не о DotNetOpenId.

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

Согласно предыдущей связанной статье я добавил следующее в System.Web в моем Web.Config, и это решило проблему:

<machineKey
    validationKey="(generated a new key to place here)"     
    decryptionKey="(generated a new key to place here)"
    validation="SHA1"
    decryption="AES" />

Ответы [ 2 ]

3 голосов
/ 22 апреля 2009

Я все еще думаю, что имя куки должно совпадать ... но вот еще кое-что.

Звучит так, будто вы говорите, если время ожидания в файле web.config велико, значит, все работает. Но если вы сократите его, ваш постоянный файл cookie не превысит значение тайм-аута. Эта тема форума помогла ответить на этот вопрос для меня: http://forums.asp.net/p/1010241/1347970.aspx#1347970

Похоже, что тайм-аут в web.config влияет на все куки. Он говорит, как долго длится проверка подлинности. Все аутентичные куки имеют это время ожидания, независимо от того, являются ли они «постоянными» или нет. Таким образом, разница между постоянными cookie-файлами и непостоянными cookie-файлами заключается в том, что первые будут сохраняться в течение разных сеансов браузера, а последние будут умирать (рано), если браузер закрыт.

Имеет ли это смысл?

2 голосов
/ 22 апреля 2009

Соответствует ли имя файла cookie в вашем файле web.config и вызове вашего контроллера FormsAuthentication.SetAuthCookie? Это может быть ошибка в образце DNOI, но я подозреваю, что если у вас есть имя файла cookie в вашем файле web.config (как в образце DNOI), то вам, вероятно, придется установить имя файла cookie в качестве третьего параметра для SetAuthCookie или RedirectFromLoginPage , В противном случае форма auth не распознает постоянный файл cookie, который вы указали в качестве файла cookie для входа.

...