1

認証タイプとして CAS サーバーが設定された ASP.NET MVC サイトがあります。また、Users テーブルと Roles テーブル (User が 1 つ以上のロールに関連付けられている) を持つ別のデータベースもあります。ユーザー名がユーザー テーブルと CAS システムの両方にある場合にのみ、ユーザーはシステムにログインできます。このソリューションが機能しています。

私の問題は、ログアウトしたユーザーの追跡を許可しようとする可能性なしに、(データベースから) 現在のユーザーを追跡できるように、User.IsAuthenticated に何らかの形のトリガーが必要になったことです。私が考えていたのは、ユーザーを HttpContext に追加する必要があるということですが、CAS セッションがタイムアウトした場合、またはユーザーがログアウトした場合にユーザーのクリアをトリガーする方法がわかりません。

また、User.IsInRole (ASP.NET ではなく、私のデータベースを使用) などの機能が必要ですが、これを実装する方法がわかりません。User を HttpContext に正常に追加できれば、IsInRole メソッドは単に User.Roles.Contains(string role) メソッドになると思いますが、たとえば、 DataAnnotation [Authorize(role = "ExampleRole")].

ASP.NET MVC 2 のカスタム メンバーシップ プロバイダーを作成するにはどうすればよいですか?などの質問を見てきました。しかし、これは私にとってはうまくいきません (おそらく CAS 認証を使用しているためでしょうか?)

どこから始めるべきか本当にわからないので、ガイダンスや背景の読み物をいただければ幸いです。GenericPrinciple、IPrinciple、および IIdentity を読みましたが、それらを現在のプロジェクトに適用する方法を理解するのに苦労しています。

4

2 に答える 2

0

最終的に、CASログオンを使用してユーザーがデータベースに存在することを確認するカスタムの承認属性が作成されました。また、そのユーザーの役割もチェックします。また、静的クラスを使用して、ユーザーがログアウトしたときにセッションを放棄するlogoutメソッドを使用して、現在のユーザーをセッションに保存しました。

于 2012-04-23T10:56:34.863 に答える
-1

私はあなたのために二部構成のようなものを持っています。このリンクは、HttpContext User を独自のオブジェクトに置き換える方法を非常によく説明しています: http://bradygaster.com/custom-authentication-with-mvc-3.0

彼のアプローチでは MVC フィルターを使用していますが、Global.asax ファイルで Authentication イベントをキャッチすることもできます。独自の実装でフォーム システムを使用することは、何を行っているかによって簡単であるか、そうでない場合もありますが、最終的には、独自のロジックの中で FormsAuthentication.SetAuthCookie と .SignOut を呼び出すことになります。

   public static void FormsLogin(this User user, bool persist)
    {
        FormsAuthentication.SetAuthCookie(user.DisplayName, persist);
        user.AddHistory("Login event.", HistoryType.Login, "SYSTEM");
        Users.OnUserLogin(user);
        SetLastActivity(user);
    }

    public static void FormsLogout(this User user)
    {
        FormsAuthentication.SignOut();
    }

最後に、ログインに関する問題が解決したら、カスタム認証属性を作成して、独自のより複雑な許可システムを使用できます。他のいくつかの回答や記事からこれをつなぎ合わせたことを覚えていますが、現時点ではソースが見つからないようです。見つかった場合は、クレジットのソースで編集して編集します。今のところ、私が提供できるのは、私が使用する属性の 1 つを提供するこの Gist だけです: https://gist.github.com/1959509

実際に関連する唯一の部分は、実際の作業を行う OnAuthorization のオーバーライドであることに注意してください。

于 2012-03-02T16:38:12.620 に答える