我正在尝试在 IIS6 Web 服务器上安装 ASP.Net 应用程序。该网站要求用户使用 Windows 进行身份验证,并且这在同一服务器上的其他几个应用程序上也有效。
在 IIS 中我已启用匿名访问和 Windows 身份验证。
在 web.config 中,身份验证设置为:
<authentication mode="Windows"/>
和授权……:
<authorization>
<allow roles="Users"/>
<deny users="*"/>
</authorization>
即允许“用户”角色中的所有用户,并拒绝其他所有人。这种方法适用于同一服务器上的其他几个应用程序。
如果我运行该网站,系统会提示我输入用户名和密码。
如果我删除该行:
<deny users="*"/>
我可以访问该网站并且一切正常 - 但用户凭据未传递到该网站(Page.User.Identity.Name 在 ASP.Net 中返回一个空白字符串)。
该站点具有与服务器上其他工作站点相同的(继承的)文件权限。
该站点与其他工作站点在身份验证/授权方面的唯一区别是,该站点运行 Asp.Net 4(但服务器上还有其他正在运行的 asp.net 4 站点)。
我在这里遗漏了什么?
我应该看哪里?
答案1
如果站点要求用户进行身份验证,则应删除匿名访问并仅允许 Windows 集成。Page.User.Identity.Name 返回空白,因为在 Windows 集成上使用匿名身份验证。
如果这是一个域,则允许角色应采用域\安全组的形式。拒绝用户中的“?”通常足以阻止匿名访问。
<identity impersonate="true" />
如果您的代码需要访问需要作为使用您的应用程序的用户进行身份验证的资源,这可能会很有用。
答案2
尝试在“拒绝用户”规则中使用“?”而不是“*”。
答案3
或者尝试以下操作。<deny users="*,?"/>