【问题标题】:Windows Authentication IIS7Windows 身份验证 IIS7
【发布时间】:2012-09-26 17:08:40
【问题描述】:

我有一个 ASP.NET 动态数据站点,只有当前登录并在域上的管理员才能访问该站点。我希望该站点能够根据用户的登录信息来判断用户是谁,并允许或拒绝访问,而无需挑战凭据。由于动态数据站点的性质,我想确定没有其他人能找到他们的方式,所以我想在 IIS 而不是 web.config 中管理身份验证和授权。但无论我做什么,它都拒绝以管理员身份访问。

在 64 位 Windows Server 2008 R2 Standard 计算机上使用 IIS7。单击该站点并进入身份验证时,我已禁用除 Windows 之外的所有模式。

所有三个可用的提供程序都按以下顺序启用:

Negotiate:Kerberos
Negotiate
NTLM

在授权中,我添加了一个拒绝规则来拒绝匿名用户,然后允许所有用户。最终将更改它以允许角色管理员,但一旦我开始工作,我就可以这样做。

我错过了什么?如果重要的话,Web 服务器、域控制器、页面所在的文件服务器都在同一个域中。

【问题讨论】:

    标签: asp.net iis-7 windows-authentication


    【解决方案1】:

    你可能想使用这个小sn-p代码:

    Public Function GetGroups() As ArrayList
        Dim groups As New ArrayList()
        For Each group As System.Security.Principal.IdentityReference In System.Web.HttpContext.Current.Request.LogonUserIdentity.Groups
            groups.Add(group.Translate(GetType(System.Security.Principal.NTAccount)).ToString())
        Next
        Return groups
    End Function
    

    这将返回当前 windows 用户所属的所有组,这样您就可以检查管理员组是否在数组列表中,如果没有则重定向它们。

    所以放弃其他访问拒绝/允许并使用他们是否在管理员组中来确定访问权限。

    您需要确保配置文件中包含以下内容:

    <system.webServer>
    ...etc
      <security>
    ...etc
        <authentication>
          <windowsAuthentication enabled="true" />
        </authentication>
    ...etc
      </security>
    ...etc
    </system.webServer>
    

    【讨论】:

    • 所以你建议我在 Web 应用程序配置而不是 IIS 中做事?我不能在 IIS 中做我想做的事吗?代码 sn-p 到底要去哪里? Application_Start 在 global.asax 中?
    • 我的最终解决方案有点不同,但源于此。我回到 IIS 中的匿名访问,在 web 配置中放置 然后在授权中添加我的允许和拒绝规则,以仅允许属于 admin 组的登录用户并阻止所有其他用户.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 2011-07-30
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多