13

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" />
4

2 に答える 2

3

私はまだクッキー名が一致するはずだと思います...しかし、ここに何か他のものがあります.

web.configファイルのタイムアウトが大きい限り、うまくいくと言っているようです。ただし、一度短くすると、永続的な Cookie はタイムアウト値よりも長持ちしません。このフォーラムのトピックは、私にとってこれに答えるのに役立ちました: http://forums.asp.net/p/1010241/1347970.aspx#1347970

web.config のタイムアウトがすべての Cookie に影響するようです。認証チケットの有効期間を示します。すべての認証 Cookie には、「永続的」であるかどうかにかかわらず、この「存続時間」タイムアウトがあります。したがって、永続的な Cookie と非永続的な Cookie の違いは、前者はさまざまなブラウザー セッション間で持続し、後者はブラウザーが閉じられると (早期に) 終了することです。

それは理にかなっていますか?

于 2009-04-22T02:11:21.180 に答える
2

Cookie 名は、web.config ファイルとコントローラーの FormsAuthentication.SetAuthCookie への呼び出しで一致していますか? これは DNOI サンプルのバグかもしれませんが、web.config ファイルに Cookie 名がある場合 (DNOI サンプルのように)、Cookie 名を SetAuthCookie または RedirectFromLoginPage の 3 番目のパラメーターとして設定する必要があるのではないかと思います。 . そうしないと、フォーム認証は、ログイン Cookie として設定した永続 Cookie を認識しません。

于 2009-04-22T02:02:07.770 に答える