FormsAuthentication を使用する ASP.NET アプリケーションがあります。アプリケーションまたは Web サーバーを再起動するたびに、認証トークンが無効になり、再度ログインする必要があります。何がうまくいかないのですか?
2 に答える
デフォルトでは、FormsAuthentication は、クライアントに暗号化されたデータのコピーを保存させることにより、すべての要求で認証データを検証します。暗号化キーは に保存されMachine.config
ます。使用する特定のキーは にあり<machineKey decryptionKey="YOUR KEY HERE">
ます。
復号化キーを指定しない場合は、アプリケーションの起動時に自動的に生成されます。ランダムに生成されるため、アプリを再起動するたびに異なります。検証段階で、FormsAuthentication は認証データの暗号化を解除しようとして失敗します。その後、ユーザーはログインしなくなります。
この問題を解決するには、2 つの方法があります。
- machineKey を
Machine.config
指定すると、FormsAuthentication で使用する一貫したキーが提供されるため、検証は以前のアプリケーション実行からの暗号化された Cookie で成功します。 - Web.config で使用
<forms protection="None" ... />
すると、認証データの暗号化と検証が無効になります。これは安全ではなく、開発にのみ適しています。ユーザーがお互いになりすますのは些細なことだからです。
特に指定しない限り、asp.net の既定のセッション状態モードはインプロセス (メモリ内にキャッシュ) です。アプリケーションがシャットダウンすると、メモリがクリアされるため、インプロセス セッション キャッシュが失われます。
@dhasenan machinekey 構成は、アプリケーションが Web ファームまたはクラウドにデプロイされている場合にのみ問題になります。Machinekey 要素のマシン レベルの構成をオーバーライドするという考え方は、複数のマシンがまったく同じキーを使用していることを確認することです。
したがって、マシン キーが問題になることはありません。アプリケーション レベルでマシン キーが提供されない場合、代わりに machine.config 内のマシン キーが使用されます。これは永続的で静的であるため、セッション間で再生成されません。