ASP.NET MVC で DotNetOpenAuth 3 を使用し、RememberMe 機能を実装する ...
FormsAuthentication.RedirectFromLoginPage と FormsAuthentication.SetAuthCookie で createPersistentCookie を true に設定しても、ASP.NET セッションがタイムアウトするとユーザーが記憶されないことがわかりました。
Cookie を調べると、永続的としてマークされており、有効期限が将来にわたって設定されていることがわかります。これは、web.config FORMS タイムアウトを数年先に設定したためだと思います。とにかく、ユーザーがブラウザーを閉じて再度開いた場合、ASP セッションがタイムアウトしない限り、それらは正しく記憶されます。
Scott Hanselmann の古い投稿では、FormsAuthentication が認証チケットを更新しようとしたためか、おそらく動作しない OpenId モデルにあるのではないかと思いますが、web.config で FORMS SlidingExpiration="false" を設定しましたが、とにかく私はそれを考えました永続的な Cookie を強制すると、そのようなものは無関係になります。
また、なぜ DotNetOpenId MVC サンプルに RememberMe チェックボックスが含まれていないのかも疑問に思っています。何か問題があるのでしょうか?
一方、ここ StackOverflow では、セッション間で自動的に記憶されていることがわかります。OpenId 認証を行うために DotNetOpenId 以外のものを使用したかどうか疑問に思っています。
ASP.NET MVC で DotNetOpenId を使用して、RememberMe を成功させた人はいますか? トリックはありますか?
[アップデート]
助けてくれてありがとう、アンドリュー。これは DotNetOpenId に関するものではないことが判明しました。
これを読んだ後、私のホスティング プロバイダーはおそらくアプリ プールを定期的にリサイクルしており、それによって認証チケットの暗号化が新しいマシン キーで行われていることがわかりました。
前のリンクされた記事に従って、Web.Config の System.Web の下に次を追加し、問題を解決しました。
<machineKey
validationKey="(generated a new key to place here)"
decryptionKey="(generated a new key to place here)"
validation="SHA1"
decryption="AES" />