3

Windows認証を使用してログインしているユーザーを確認するASP.Net MVCイントラネットサイトがあります(無許可の閲覧は許可されていません)。ユーザーが初めて訪れる際には、連絡先オブジェクト(名前、電子メール、国など)のための基本情報が収集され、アプリケーションデータベースに格納されます。Windows認証とSQLメンバーシップサービス

サイトの役割をベースにしたいので、各ユーザーに役割(ユーザー、管理者など)を割り当てる必要があります。私はADSグループを使ってこれを行うことができましたが、これはかなり重いようです。 ASP.Netで提供されているSQLメンバーシップサービスを使用してユーザー名を格納し、次にそのユーザーが所属するロールを格納することができますか?またはパスワードなどの収集を強制されますか(Windows認証の使用のポイントを打ち負かしますか?これはASP.Net MVC [Authorize]属性と統合されていますか?

答えて

7

"通常の" ASP.NETでは、この組み合わせ(Windows認証とSQL for Roles)を使用できることは確かです。したがって、MVCでも可能です。

ここにはa link that might helpです。

+0

非常に興味深いリンク、ありがとうリチャード:

はここで実際に動作してコンパイルして、ハッカーによる攻撃にあなたのウェブサイトを公開しないことがありますいくつかのサンプルコードです。 –

2

はい、これを行うことができます。

Authorizeは、IPrincipalのIsInRoleメソッドを使用して、ユーザーが特定のロール内にいるかどうかを判断します。

IPrincipalのデフォルトの実装を、Global.asax内のAuthenticateRequestイベント中に、これを処理する実装と共に切り替えることができます。

private void Application_AuthenticateRequest(object sender, EventArgs e) 
{ 
    if (!Request.IsAuthenticated) 
    { 
     Context.User = new MyPrincipal { Identity = new MyIdentity 
       { Type = UserType.Inactive, Id = int.MinValue }}; 
     Thread.CurrentPrincipal = Context.User; 
    } 
    else 
    { 
     HttpCookie authCookie = Request.Cookies[ 
      FormsAuthentication.FormsCookieName]; 
     if (authCookie != null) 
     { 
      FormsAuthenticationTicket authTicket = 
        FormsAuthentication.Decrypt(authCookie.Value); 

      var identity = Db.GetIdentity(
       authTicket.Name, new HttpRequestWrapper(Request)); 
     Context.User = new MyPrincipal { Identity = new MyIdentity 
       { Type = UserType.Inactive, Id = int.MinValue }}; 
     Thread.CurrentPrincipal = Context.User; 
     } 
    } 
} 
+0

ありがとう、私はそれを行こう! –