2017-02-23 18 views
0

IWA(統合Windows認証)を使用するページにユーザーをリダイレクトするWebアプリケーションを作成しようとしています。私は、ユーザーが次のダイアログC#統合Windows認証 - コードで認証し、ログインプロンプトを表示しない

enter image description here

が表示されないようにするしかし、その代わりに、私は、アプリケーションがユーザーのページにリダイレクトを認証します。大歓迎

は、私は本当にこの上で開始する方法について良いアイデアを持っていないとすべてのヘルプは次のようになり

**

  • UPDATE

**

私が到達しようとしているURLがActive Directoryに接続されていないため、文字通りWindows認証のローカル認証情報しか使用されず、1アクセスしているマシン上のユーザー。

私は、この1人のユーザーの資格情報を使用して自動的に認証されたページにリダイレクトされるすべてのユーザーを取得しようとしています。資格情報は、データベース内のユーザーセッションの存在に基づいてアクセスされます。

IWAはNTLMを使用するように構成されています。

+0

このASP.Net WebフォームまたはASP.Net MVCですか? Active Directoryを使用していますか? – Win

+0

私はWeb APIを使用する予定でしたか?明らかにIWAだけが認証に使用していますか? –

答えて

3

あなたはActive Directoryで認証されることを前提としています。その場合、PrincipalContextおよびOWINミドルウェアを使用できます。

GitHubでAspNetMvcActiveDirectoryOwinというサンプルプロジェクトを作成しました。それをフォークして実行することができます。 これはもともとASP.Net MVC用に書かれていますが、ASP.Net Web APIでも同じビジネスロジックを使用できます。

次の手順を実行する必要があります。まず、Active Directoryで認証する必要があります。

注:他のタイプの認証方法を使用する場合は、このクラスのロジックを変更する必要があります。

public class ActiveDirectoryService : IActiveDirectoryService 
{ 
    public bool ValidateCredentials(string domain, string userName, string password) 
    { 
     using (var context = new PrincipalContext(ContextType.Domain, domain)) 
     { 
      return context.ValidateCredentials(userName, password); 
     } 
    } 

    public User GetUser(string domain, string userName) 
    { 
     User result = null; 
     using (var context = new PrincipalContext(ContextType.Domain, domain)) 
     { 
      var user = UserPrincipal.FindByIdentity(context, userName); 
      if (user != null) 
      { 
       result = new User 
       { 
        UserName = userName, 
        FirstName = user.GivenName, 
        LastName = user.Surname 
       }; 
      } 
     } 
     return result; 
    } 
} 

第二に、あなたはOwinミドルウェアで使用されるクレームを作成したいです。

public class OwinAuthenticationService : IAuthenticationService 
{ 
    private readonly HttpContextBase _context; 
    private const string AuthenticationType = "ApplicationCookie"; 

    public OwinAuthenticationService(HttpContextBase context) 
    { 
     _context = context; 
    } 

    public void SignIn(User user) 
    { 
     IList<Claim> claims = new List<Claim> 
     { 
      new Claim(ClaimTypes.Name, user.UserName), 
      new Claim(ClaimTypes.GivenName, user.FirstName), 
      new Claim(ClaimTypes.Surname, user.LastName), 
     }; 

     ClaimsIdentity identity = new ClaimsIdentity(claims, AuthenticationType); 

     IOwinContext context = _context.Request.GetOwinContext(); 
     IAuthenticationManager authenticationManager = context.Authentication; 

     authenticationManager.SignIn(identity); 
    } 

    public void SignOut() 
    { 
     IOwinContext context = _context.Request.GetOwinContext(); 
     IAuthenticationManager authenticationManager = context.Authentication; 

     authenticationManager.SignOut(AuthenticationType); 
    } 
} 
関連する問題