7

私は友人を助けようとしています-彼らはかなり大きなWebアプリケーション(ASP.NET 4.0、Visual Basic)を持っており、それらはすべて準サブアプリケーションとして機能するいくつかのサブフォルダーを持っています(ただし、それらはメインアプリケーションの単なるサブフォルダーです) )。このアプリケーションは、現在の形式ではこれ以上保守および開発することが難しいため、複数の独立したWebアプリケーションに分割されます。

問題は、現在のモノリシックアプリケーションがユーザー情報(ログオン後など)などに多数のセッション変数を使用することです。将来の複数のWebアプリケーション(明らかに独立している)間でこの情報を安全に共有する簡単な方法があるかどうか疑問に思いますセッション)。セッション状態はSQLServerに保存されます。現在のWebアプリケーションのユーザーはすべて外部ユーザーであり、すべてのユーザーがすべての「サブアプリケーション」にアクセスできるわけではありません。

私はこれらの2つのことについていくつかのアドバイスを探しています:

1.すでに検索を行ってシングルサインオンを見つけました。これにより、これらのアプリケーション全体の認証の問題が解決するようですが、慣れていないため、「セッション」の場合に認証情報がどのように削除されるのかわかりません。異なるWebアプリケーションは異なるセッションを持つため、有効期限が切れます。いずれかのWebアプリケーションでセッションが期限切れになると、すべてのWebアプリケーションからユーザーをログアウトすることはできますか?

2.分割後に共有する必要のある認証情報に加えて、他のセッションデータがあるのではないかと思います(確かではありません)。これを行うための最良の方法は何でしょうか(これも確実かつ安全に)?

IDを(共有データを保持するデータベースレコードに)渡すことについてのこの記事を見つけ、それが良いかどうか疑問に思いました。

すべてのアドバイスをいただければ幸いです。

PS:私はこれについてSOでいくつかのスレッドを見つけましたが、それらのどれもこれらの特定の質問に答えるとは思いません。私が見つけた最も役に立ったのはこれでした:

ASP.NETアプリケーション間でのデータの共有

4

2 に答える 2

13

最終的に私はこの問題の解決策を見つけました、そして私は他の人への参照としてそれをここに残します:

StateServerは、メモリ内のセッションを処理するWindowsサービス(ASP.NET State Service)を使用します。これは、MachineKey、AppDomainAppID、およびSessionIDを使用して、アプリケーションを一意に識別します。

  • web.configで同じMachineKeyを、サイト内のすべてのアプリケーションで同じになるように設定します。
  • Global.asax Init()にコードを追加して、AppDomainAppIDをすべてのアプリケーションで同じになるように設定します。
  • ISessionIDManagerを実装し、サブアプリケーションで再利用するカスタムセッションIDを返します。

次のリンクは、私が行った実際の実装への情報を提供しました。

于 2012-07-29T13:41:24.960 に答える
3

異なるアプリケーション間でASP.NETセッションを共有することが可能です。明らかに、同じセッション状態データベースを共有するすべてのアプリケーションは、同じバージョンのASP.NET(セッション状態データベースと互換性のあるバージョン)上にある必要があります。また、すべての共有アプリケーションは、セッション状態の情報がどのように維持されるかについて調整を維持する必要があります。たとえば、セッション変数は、アプリケーション間で互換性のある情報と意味を維持する必要があります。

于 2012-06-30T23:50:07.847 に答える