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

3

我有一个应用程序,其中显示当前用户所属的所有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
虽然我不能确认或否认,但当不需要身份验证时,不对用户进行身份验证似乎是一个合理的优化。 - Lazarus
当 User.Identity.Name 失败时,它是否有值? - Zachary
如果允许匿名访问,Asp.net不需要身份验证。 真的吗?如果其他用户不需要发送用户名,为什么我要发送呢?他比我更好吗? 您可以在global.asax事件中设置断点以确保此操作。 - vortexwolf
我不确定你所说的“如果其他用户没有,为什么我还要发送我的用户名?”评论的意思。我不关心用户名,如果用户属于任何组,我想知道属于哪些组。 - Abe Miessler
1个回答

3

我可能错了,但我认为它是这样工作的:

当浏览器第一次访问网站时,它以匿名身份访问。

如果服务器表示不允许匿名访问,则浏览器会发送用户的Windows凭据。

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

因此,因为您的网站允许匿名访问,所有用户都是以此方式进入的。


你知道是否有可能强制浏览器发送用户窗口凭据吗? - Abe Miessler
1
@Abe:通过IIS设置关闭匿名访问。只需使用IIS管理器即可。它应该在身份验证(IIS 7)下。只需禁用“匿名身份验证”,启用“基本身份验证”,这将发出登录挑战。IE将自动发送这些凭据进行第一次测试。不确定其他浏览器是否支持。 - NotMe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接