什么时候发生ASP.NET身份验证?

时间:2010-11-30 16:25:16

标签: asp.net security active-directory

我有一个应用程序,其中显示当前用户所属的每个Active Directory组。当我的配置设置如下:

    <authentication mode="Windows"/>
    <authorization>
        <deny users="?"/>
        <allow users="*"/>
    </authorization>

工作正常。当它是这样的:

    <authentication mode="Windows"/>
    <authorization>
        <!--<deny users="?"/>-->
        <allow users="*"/>
    </authorization>

找不到任何群组。为什么这会有所不同?如果我们明确拒绝访问未经身份验证的用户,asp.net是否只进行身份验证?

如果这有助于我获得这些团体:

    protected string GetUserGroups()
    {
        StringBuilder userGroups = new StringBuilder();
        ArrayList groupMembers = new ArrayList();
        DirectoryEntry root = new DirectoryEntry("LDAP://myldap/DC=nc,DC=local");
        DirectorySearcher ds = new DirectorySearcher(root);
        ds.Filter = String.Format("(&(samaccountname={0})(objectClass=person))", User.Identity.Name.Substring(User.Identity.Name.LastIndexOf(@"\") + 1));
        ds.PropertiesToLoad.Add("memberof");
        try
        {
            foreach (SearchResult sr in ds.FindAll())
            {
                foreach (string str in sr.Properties["memberof"])
                {
                    string str2 = str.Substring(str.IndexOf("=") + 1, str.IndexOf(",") - str.IndexOf("=") - 1);
                    groupMembers.Add(str2);
                }
            }
        }
        catch
        {
            //ignore if any properties found in AD  
        }
        return String.Join("|", (string[])groupMembers.ToArray(typeof(string)));
    }

1 个答案:

答案 0 :(得分:3)

我可能错了,但我相信这是如何运作的:

浏览器第一次访问网站时,它是匿名的。

如果服务器说不允许匿名,则浏览器会发送用户窗口凭据。

如果这些凭据没有通过审核,则浏览器会弹出登录框或(根据应用程序)将它们发送到登录页面。

因此,由于您的网站允许匿名,所有用户都会以这种方式进入。