1

ASP.NET Webサイトにフォーム認証を実装したいのですが、サイトはデータベース上のユーザーを探してデータを取得してから、LDAP(Active Directory)に対して認証して、ユーザーとパスワードの組み合わせを検証する必要があります。

その後、さまざまな形式で使用するために、ユーザーを表すクラスのインスタンスを保持する必要があります。

以前にログインコントロールを使用してこれを実行しようとしました。これは、以前の条件をチェックしAuthenticateEventArgs.Authenticated = true、オブジェクトをセッション内に配置しました。Session ["user"] = authenticatedUser;しかし、両方の同期に問題がありました(セッションは、認証Cookieの前に期限切れになり、ページのときにNullReferenceExceptionsが発生しました。現在は機能していないセッションオブジェクトを使用しようとしました)。

これを達成するための最良の方法はどれですか?セッションタイムアウトをCookieの寿命と同期させる方法はありますか?ユーザーオブジェクトは他の方法で保存する必要がありますか?ポイントを逃しましたか?

更新:サイトは外部のプライベートネットワークからアクセスできる必要があるため、Windows認証プロバイダーを使用できません。

4

3 に答える 3

1

メインの認証プロバイダーとして Windows 認証を使用しますが、ユーザー情報には独自の単純なデータベースの永続化をロールバックします。

セッション メソッドは機能します。IIS でセッション タイムアウトを調整し、それを認証 Cookie タイムアウトと一致させることができます。

また、HTTPModule でこのようなことを行って、セッションをクリアするエッジ ケース (アプリ プールのリサイクルなど) をキャッチすることもできます。

疑似コード:

if (session["user"] == null)
{
    Authentication.SignOut();
}

これにより、ユーザーの認証が強制されます。

于 2008-10-15T22:29:33.797 に答える
0

セッションにユーザー情報を保存すると、正常に機能します。セッションタイムアウトと認証Cookieタイムアウトを同期するには、web.configを編集するだけです。

<sessionState timeout="XX" />
<authentication mode="Forms">
  <forms loginUrl="Login.aspx" timeout="XX" />
</authentication>

両方の値は分単位です。

セッションから値を取得するたびにnullをテストしてください!

于 2008-10-17T08:45:15.627 に答える
0

セッションと認証 Cookie のタイムアウト値を同じ値に設定しました。認証 Cookie にスライディング ウィンドウを使用します。また、セッションから取得した値を使用する前に、その値が非 null であると想定しないことも習慣にしています。私はよく、すべてのセッション機能を、セッションに保存する値の厳密に型指定されたプロパティを含むプロキシ クラスに抽象化します。不正なセッション データのエラー処理は、プロキシでローカライズされています。

于 2008-10-16T00:09:38.507 に答える