1

私は認証と承認にASP.NET IDを使用しています。私は推奨された方法(構築と実行のために別々のコンテナ)でドッカーを使用しているので、各展開の後は常にログアウトしています。 ASP.NET Coreのようにセッションをデータベースに格納していないようです。また、私は彼らがどこにテーブルを見ることができません。DockerをASP.NETコアにデプロイした後の自動ログアウトMVC ID

各展開後にユーザーがログアウトしないようにするにはどうすればよいですか?

私はデータベースにセッションを保存する必要があると思います。しかし、私はこれを行う方法の情報を見つけることができませんでした。 using Redis as session storeについての情報が見つかりました。これは近づいてきます - これがASP.NET IdentityセッションやTempDataのようなセッションストアにも影響するかどうかはわかりません。もう一つの問題は、Pomelo.EntityFrameworkCore.MySqlプロバイダを使用してMySQLデータベースにセッションを保存したいということです。

+0

https://github.com/aspnet/Caching/tree/dev/srcを参照してください。複数のキャッシュストア(開発用メモリ、運用用のRedis、さらにはSqlServer)があります。もちろん、SqlServerキャッシングが実装されている方法を見て、他のプロバイダのために似ています – Tseng

+0

@ Tseng私はすでにこれを見て、同じ考えを持っていました。しかし、私はこのような実装のために現在時間がないプロジェクトのためにこれを必要とします。 – Lion

答えて

1

メモリストレージを使用すると、暗号化キーの問題も発生することがわかりました。短期的には、ASP.NETコアはこれらのキーを使用してセッションなどの機密データを保護します。したがって、それらはプレーンテキストでは保存されません。最初のアプリケーションの実行時にASP.NETがこれらのキーを自動的に生成するように見えます。

それはドッカーコンテナ内で実行される原因は、これは、2つの大きな問題になります:

  • encriptionキーはコンテナイメージを再構築することで迷子に。 ASP.NET Coreは自動的に新しいものを生成しましたが、別のキーを使用して暗号化された既存のセッションを復号化することはできません。

  • コンテナが隔離されているため、セッションのデフォルトメモリストレージプロバイダは、新しい展開

これは、私が示唆したように、Webサーバーとは別のサーバーで実行されているストレージを使用することで解決できます。私はこのためのMySQLの実装を見つけることができませんでした。 MSSQLと思われるSQLサーバのみ。私はRedisサーバーをインストールして修正しました。それはセッションストレージのために使用されます暗号化キー。これは、以来、ASP.NETコアの一部のみであることに注意してください、

var redis = ConnectionMultiplexer.Connect($"{redisIpAddress}:{redisPort}"); 
services.AddDataProtection().PersistKeysToRedis(redis, "DataProtection-Keys"); 

AddOptions前に、RedisのでASP.NETコアのストレージ暗号化キーを聞かせてMicrosoft.AspNetCore.DataProtection.RedisプロバイダをインストールしてConfigureServicesに次の行を追加する

1.1.0リリース。 1.1.0ブランチの他のパッケージに依存しているので、LTS 1.0リリースでは動作していないと思います。この場合、互換性のあるカスタム実装を作成する必要があります。私は私のプロジェクトで1.1.0を使用しているので、私はこれをテストしていません。この記事のその他の情報:

要約すると、私は、RedisがSQLデータベースの代わりにこのためにRedisを使用するのは悪い考えではありません。なぜなら、Redisはキーと値のペアを非常に高速に処理するためです。そして、基盤は、(複雑な)データベースクエリのようなアプリケーションの他の部分をキャッシュするためにRedisを使用することです。これにより、アプリケーションの処理速度が向上し、データベースサーバーの負荷が軽減されます。

+0

私はチュートリアルに従ってきましたが、私が別のフォルダにアプリをコピーするたびに、すべてのトークンがなくなり、ユーザーセッションがなくなりました。私は 次のコードは何も起こらないと思う。 'var redis = ConnectionMultiplexer.Connect(" 127.0.0.1:6379 ");services.AddDataProtection()。PersistKeysToRedis(redis、 "DataProtection-Keys"); ' –

関連する問題