2009-03-12 26 views
5

ASP.NET Windows認証とカスタムIPrincipal/IIdentityオブジェクトを組み合わせる良い方法はありますか?ユーザーの電子メールアドレスを格納し、AuthenticateRequestイベント中にContext.CurrentUserに追加したカスタムIIdentity/IPrincipalペアを使用してフォーム認証を行う必要があります。カスタムIPrincipalとWindowsAuthenticationの併用

WindowsAuthenticationを使用してこれを行うにはどうしたらいいですか?

答えて

3

WindowsPrincipalに基づいて派生クラスとして "ExtendedWindowsPrincipal"を作成し、派生クラスに余分なデータを追加するだけかもしれませんか?

あなたのExtendedWindowsPrincipalは、WindowsPricinpalが必要な場所であればどこでも認識されます。

またはWindows認証を使用しているので、Windowsネットワークに接続している可能性があります。Active Directoryやユーザーデータベースがどこかにあり、自分の電子メールアドレスを調べることができます。プリンシパルに保存するのではなく、興味を持っていますか?

マルク・

+0

が私の考えでしたが、私はそれがIPrincipalを交換するのが賢明だ場合にわからないんだとどのようにそれは正しく行われています。 私はディレクトリから電子メールアドレスを検索するつもりですが、私はwを行ったのと同じように、すべてのユーザー情報を1か所で収集することを考えました。カスタム認証。 – PHeiberg

+0

派生クラスの場合は、WindowsPrincipalを独自のExtendedWindowsPrincipalで置き換えても問題はありません。結局のところ、それはまだWindowsPrincipalです - 追加されたものがいくつかあります。 これを行うには、global.asaxとApplication_AuthenticateRequestを調べます。 –

+0

IsInRoleを動作させるのに問題があり、IPrincipalの使用に時間を費やしたくないので、残りのユーザー情報をコンテキストアイテムに入れてしまいました。 ありがとうございます。 – PHeiberg

3

私が当初考えていたとして代わりにアイデンティティの校長を置き換えるに私の最初の溶液をリファクタリング終わりました。私は新しい拡張WindowsPrincipalのインスタンスを作成するときにセキュリティ上の問題に遭遇したので、アイデンティティを置き換えることは面倒でした。私の認証モジュールで

public class ExtendedWindowsPrincipal : WindowsPrincipal 
{ 
    private readonly string _email; 

    public ExtendedWindowsPrincipal(WindowsIdentity ntIdentity, 
     string email) : base(ntIdentity) 
    { 
      _email = email; 
    } 

    public string Email 
    { 
     get { return _email; } 
    } 
} 

私はこのようなのHttpContextに元本を置き換え:派生クラスを作成する

var currentUser = (WindowsIdentity)HttpContext.Current.User.Identity; 
HttpContext.Current.User = 
    new ExtendedWindowsPrincipal(currentUser, userEmail); 
+0

ポストのおかげで、数時間前から頭を叩いていました。同じセキュリティ上の問題を抱えて...右?あなたのソリューションは動作しますが、多くの感謝! –

関連する問題