2012-02-14 14 views
3

私は自分の開発者PCにAD LDSをインストールしましたが、すべてが動作します.ADSI Editを使用してユーザー "abc"を作成しました。AD LDSに対して認証する

私の目標は、テスト用AD LDSインスタンスでASP.NET MVC 3 Webアプリケーションをテストすることです。

インスタンスに対してユーザーを認証するようにアプリを設定するにはどうすればよいですか?カスタムメンバーシッププロバイダを作成する必要がありますか? (既定のADメンバーシッププロバイダの一部をオーバーライドしますか?)

ありがとうございました!

+1

カスタムプロバイダを作成する必要はありません。あなたは他のLDAPツールを使ってそれに接続できますか? –

答えて

0

iisによって処理されるため、認証を行う必要はありません。 認証モードをウィンドウに変更するだけです。

<system.web> 
     <authentication mode="Windows" /> 
    </system.web> 

IISがインストールさ後にADをインストールするか、手動で登録するかを覚えておいてください。

0

AD LDSを使用しているため、認証モード「Windows」が役に立たないと思います。私はあなたがログインビュー(ここでは/アカウント/ログオン)を作成し、認証モード "フォーム"を使用する必要があると信じています。

は、ユーザがSystem.DirectoryServices.AccountManagementを使用することによって達成することができる認証のweb.configに

<authentication mode="Forms"> 
    <forms name=".ADAuthCookie" loginUrl="~/Account/Logon" timeout="30" slidingExpiration="false" protection="All"/> 
</authentication> 

<authorization> 
    <deny users="?"/> 
</authorization>  

をfollowwingを入力してください。コントローラのコードは、次のようになります。

public ActionResult Logon(LogonModel model) 
{ 
    if (model.Username != null && model.Password != null) 
    { 

     string container = "CN=...,DC=....,DC=...."; //Your container in LDS 
     string ldapserver = "server:port"; //LDS server 

     PrincipalContext context = new PrincipalContext(
      ContextType.ApplicationDirectory, 
      ldapserver, 
      container, 
      ContextOptions.SimpleBind); 


     bool authenticate = context.ValidateCredentials(string.Format("CN={0},{1}", model.Username, container), model.Password, ContextOptions.SimpleBind); 

     if (authenticate) 
     { 
      FormsAuthentication.RedirectFromLoginPage(model.Username, false); 
     } 
     else 
     { 
      System.Threading.Thread.Sleep(5000); 
      this.ModelState.AddModelError("Password", "Wrong username or password"); 
     } 
    } 

    return View("Logon", new LogonModel { Username = model.Username }); 
} 

これは、認証のみを行い認証を解決することに注意してください。

また、メンバーシッププロバイダを使用することもできますが、簡単な解決策を探している場合は、このトリックを行うべきだと思います。

関連する問題