1

アプリケーション バックグラウンド セキュリティ: アプリケーションはすべて、プライベート エクストラネット (および/またはローカル イントラネット - インストール インスタンスに応じて) でホストされます。したがって、セキュリティは重要ですが、イントラネット上のアプリケーションほど重要ではありません。ただし、システムが簡単にハッキングまたはハイジャックされないことが重要であると述べています。

アプリ: アプリケーションは 2 つの部分に分かれています:-

  • クラス ライブラリ (dll)
  • 認証 フロントエンド ASP.NET アプリケーション

dll はフロントエンド認証アプリケーションの一部であり、ユーザーの認証を必要とする他のアプリケーション (「コンシューマー アプリ」) に追加されます。

認証アプリは、すべてのユーザー、ユーザーがアクセスできるアプリケーション、およびユーザー名に基づくアクセス許可レベルの中央ストアです。

dll がインストールされているコンシューマー アプリの場合、エンド ユーザーがログインを要求するページにアクセスすると、コンシューマー アプリは認証アプリケーションの login.aspx ページを appid と共に起動します。彼らは必要な権限を持っており、認証アプリはそれらを消費者アプリに送り返します(暗号化されたデータを含むフォームを介して)-これには、ユーザーが誰であるか、ユーザー名、実名、職務、組織などに関する基本データが含まれます...そして重要なことにコンシューマー アプリのアクセス許可レベルのリスト。

次に、コンシューマー アプリはそのデータを取得し、処理、復号化などを行い、フォーム認証 Cookie を作成し、ユーザー クラスとユーザー ロール クラスを設定します。これはすべて dll 自体から行われます。

問題

これですべてうまくいき、最初はすべてのデータが認証 Cookie のユーザーデータ部分に保存されていましたが、ここに問題があります....

コンシューマー アプリ (社内で作成された中心的なアプリが 1 つあります。1 人のユーザー (主にアプリケーション管理者) に関連付けられた多くのアクセス許可 (ユーザー ロール) を持つことができるため、大量のデータを保持できるものが必要です。認証 Cookie が保持できる 4KB を超えています。

したがって、これをセッション変数に入れようとしました。最初は、復号化されたデータをすべて「userdata」と呼ばれる単一のセッション変数に送信した単一の変数です。次に、リクエストが行われたときに確認します。

でも...

私が抱えていた最初の問題は、認証 Cookie の寿命がセッションよりも長いように見えることでした。セッションを 35 分 (AuthCookie より 5 分長い) に延長することでこれを修正したと思います。

しかし、コンシューマー アプリ プログラマーがコードを変更し (Visual Studio 2010 を介してデバッグで localhost を実行)、ブラウザーを更新すると、AuthCookie は残りますが、セッションは消えます。最初は、デフォルトの InProc セッション モードを使用していますが、これが問題になる可能性があります。

私の仮定は正しいですか?セッションと AuthCookie をプログラムで同期する方法はありますか?

この問題を解決するための他のアドバイスはありますか?

4

1 に答える 1

1

アプリケーションが更新されるたびに (コードを変更しているときに発生する可能性があります)、さまざまな理由でサーバー上で発生する可能性があるため、ユーザー セッションはクリアされます。

私がこれを正しく読んでいる場合、おそらくやりたいことは、Session_Start の Cookie の存在を確認し、セッション データを更新して、セッションに再度読み込まれるようにすることです。セッションは世界で最も安定したものではなく、セッション タイムアウトでさえ、常にあなたが思っているものとは限りません

Global.asax をまだ持っていない場合は、プロジェクトに追加します。C# なら Global.asax.cs を編集するか、VB なら Global.asax.vb だと思います。

protected void Session_Start(object sender, EventArgs e)
{
// Check for Cookie, if it exists here, then load data into the session here.
}
于 2011-10-01T13:31:23.447 に答える