3

Windows認証を使用して誰がログインしているかを知るASP.NetMVCイントラネットサイトがあります(匿名ブラウジングは許可されていません)。ユーザーが初めてアクセスするとき、連絡先オブジェクト(名前、電子メール、国など)の非常に基本的な情報をユーザーから収集し、アプリデータベースに保存します。

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

4

2 に答える 2

7

この組み合わせ(Windows認証とSQL for Roles)を使用できるのは確かに「通常の」ASP.NETの場合であるため、MVCでも可能であるはずです。

これが役立つかもしれないリンクです

于 2009-05-20T14:58:32.797 に答える
2

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

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

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

実際に機能してコンパイルされ、Webサイトがハッカーによる攻撃にさらされない可能性のあるサンプルコードを次に示します。

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;
        }
    }
}
于 2009-05-20T15:02:15.457 に答える