Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc Windows身份验证&;SQL成员服务_Asp.net Mvc_Authentication_Windows Authentication_Sqlmembershipprovider - Fatal编程技术网

Asp.net mvc Windows身份验证&;SQL成员服务

Asp.net mvc Windows身份验证&;SQL成员服务,asp.net-mvc,authentication,windows-authentication,sqlmembershipprovider,Asp.net Mvc,Authentication,Windows Authentication,Sqlmembershipprovider,我有一个ASP.NETMVC内部网站,它使用Windows身份验证来了解谁已登录(不允许任何浏览)。用户第一次访问时,我从他们那里收集了一些关于联系人对象(如姓名、电子邮件、国家)的基本信息,然后将这些信息存储在应用程序数据库中 我想使网站的角色为基础,所以我需要能够分配给每个用户一个角色(用户,管理员等)。我可以用广告群来做这件事,但这似乎相当重要。我是否可以使用ASP.Net提供的SQL成员资格服务来存储他们的用户名以及他们所属的角色,或者我是否会被强制收集密码等(不使用Windows身份验

我有一个ASP.NETMVC内部网站,它使用Windows身份验证来了解谁已登录(不允许任何浏览)。用户第一次访问时,我从他们那里收集了一些关于联系人对象(如姓名、电子邮件、国家)的基本信息,然后将这些信息存储在应用程序数据库中


我想使网站的角色为基础,所以我需要能够分配给每个用户一个角色(用户,管理员等)。我可以用广告群来做这件事,但这似乎相当重要。我是否可以使用ASP.Net提供的SQL成员资格服务来存储他们的用户名以及他们所属的角色,或者我是否会被强制收集密码等(不使用Windows身份验证)?这是否也与ASP.Net MVC[Authorize]属性集成?

在“普通”ASP.Net中,您当然可以使用这种组合(Windows身份验证和角色SQL),因此MVC也应该可以使用

这是。

是的,你可以这样做

授权使用IPrincipal的IsInRole方法确定用户是否在给定角色内

在Global.asax中的AuthenticateRequest事件期间,您可以使用自己处理此问题的实现切换出IPrincipal的默认实现

以下是一些示例代码,这些代码实际上可以运行和编译,不会使您的网站受到黑客的攻击:

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;
        }
    }
}

谢谢威尔,我要试一试!