2009-09-10 33 views
6

私はasp.net mvc 1.0 Webアプリケーション用のカスタムログインシステムを構築しました。これは、各ユーザーのために大量のユーザーデータを格納するためです(Windows用のカスタムテーブルを追加しようとしなかったこれによる認証)。ログインシステムは、基本的にSQL Server(2005または2008)と自分のデータベースとテーブル構造を使用しています。これはかなり標準的です。ユニークなID、ユーザー名、およびユーザーの関連データの他のテーブルにリンクされているハッシュされたパスワードを持つユーザーテーブル。ASP.NET MVCでのWindows認証

私の質問は、Windows認証ログインを使用するために私のシステムを結びつけることができます。私は管理者が(私のシステムで定義されている)ユーザのためにWindows認証ログインを選択し、おそらく私がそれらを認証するために使用できる私のカスタムテーブルの何かに値を追加することを許可したいと思いますか?

質問は間違っていると思われますが、私はWindows認証の仕組みについて誤解しているかもしれませんが、私のWebアプリケーションでこのオプションを提供したいと考えています。

+0

私は正確な答えは分かりませんが、私はアクティブディレクトリを設定し、ネットワーク上の各人にユーザーを持つ必要があると思っています。それから私はあなたがweb.configを使用してasp.netユーザーを偽装する必要があると思うだろうし、あなたは行かなくてはなりません。 – rball

答えて

8

は、あなたが彼らのNT/Active Directoryを取得するためにUser.Identity.Nameを使用することができるはずです。たぶん、あなたは、あなたの質問に答えるかもしれないいくつかの一口があります現在ログインしているユーザーのユーザー名を照会し、ユーザー表の列と照合します。私は小型のために取り出してきたいくつかのカプセル化があります

public class MyBaseController 
{ 
    protected override void OnAuthorization(AuthorizationContext authContext) 
    { 
    if 
    (
     !User.Identity.IsAuthenticated && 
     Request.LogonUserIdentity != null && 
     Request.LogonUserIdentity.IsAuthenticated 
    ) 
    { 
     String logonUserIdentity = Request.LogonUserIdentity.Name; 
     if (!String.IsNullOrEmpty(logonUserIdentity)) 
     { 
     User loginUser = 
      Context.Users.FirstOrDefault(
      x => x.UserIdentity == logonUserIdentity); 
     if (loginUser != null) 
      FormsAuthentication.SetAuthCookie(
      loginUser.LoginName,createPersistentCookie); 
    } 
    } 

- :

+0

私のactionfilter HttpContext.Current.User.Identity.Nameで私のUsername(MACHINE \ PHIL)にアクセスでき、IsAuthenticatedが設定されています。ですから、私のユーザ名をUser.IDentity.Nameに関連づけて認証されていることを確認するために、私のユーザテーブルに別の列を追加するだけです。 – Phil

+1

User.Identity.Nameが値を返す場合は、AREが認証されます。また、認証されていない限り、ページにアクセスできないようにする必要があります(IISは、ページをレンダリングする前にそれらを強制的にauthenitcateにします)。 – Scrappydog

1

質問を正しく理解していれば、Windows認証ユーザー名にリンクされた他のデータを追加したいですか?

もしそうなら、ユーザー名とこのカスタム情報を新しいテーブルに保存する必要があります。 Active DirectoryにWindows認証データが存在するため、ユーザーの一覧が表示されます。 Windowsがユーザーを認証したときに、自動的にADにカスタム情報が追加されることはありません。カスタム情報が必要な場合は、カスタムルックアップをADに追加するか、情報の保存場所に応じてデータベースのカスタムデータを参照するだけです。

ほとんどの場合、Windows認証で取得できるのは、ユーザーのユーザー名と、そのユーザーに関連付けられている役割(ADグループ)を確認する機能です。それを超えるものは、手動でコードを作成する必要があります。

私は最近、MVCの組み込みセキュリティを超えてカスタマイズを実装することについて質問し、自分で解決策を考え出しました。あなたがWindowsの認証は、サイト上で有効になっている場合は

How to implement authorization checks in ASP.NET MVC based on Session data?

+0

便利なコメント、素敵な背景の読書や他のアイデア。 – Phil

8

は、ここではハイブリッドフォーム/ Windows認証アプリのためにそれをやった方法です。

+0

便利なコードスニペットをありがとう! :) – Phil

+0

イアン、もっとコードを投稿してもよろしいですか?私はこの機能を適切にカプセル化し、どのようにIISを構成したかに興味があります(私は自分でIIS 7を使用しています)。 ありがとうございます。 – wgpubs

関連する問題