【问题标题】:Windows Authentication prompts for username/passwordWindows 身份验证提示输入用户名/密码
【发布时间】:2010-10-10 22:07:50
【问题描述】:

我正在尝试使用 AD/域控制器在客户端网络中部署应用程序。

我的应用程序是一个简单的 asp.net c# 应用程序,使用 windows 身份验证。

我用的是win2003。

基本上,使用 VS2008,创建一个新网站,托管在 IIS6.0 上。 只有2个变化。 1. 在应用程序的 IIS 目录安全性上,启用“集成安全性”。
注意:匿名也是启用的。

只对生成的骨架代码进行了一次更改。 在 default.aspx 的 page_load 方法中添加以下内容

using System.Security.Principal;
...
protected void Page_Load(object sender, EventArgs e)
{
    WindowsIdentity id = WindowsIdentity.GetCurrent();
    Response.Write("<B>Windows Identity Check</B><br>");
    Response.Write("Name: " + id.Name + "<br>");
    Response.Write("<BR>");
    Response.Write("User.Identity: " + User.Identity.Name);
    Response.Write("<BR>");
}

浏览到页面的输出: Windows 身份检查 - 名称: NT AUTHORITY\NETWORK SERVICE 用户身份:

User.Identity.Name 不输出当前用户名。

如本文所述http://weblogs.asp.net/scottgu/archive/2006/07/12/Recipe_3A00_-Enabling-Windows-Authentication-within-an-Intranet-ASP.NET-Web-application.aspx

我补充说:

<authorization>
    <deny users="?"/>
</authorization>

从我的用户立场来看,添加后,我可以从 User.Identity.Name 获取当前用户、用户名。

但是,一旦我添加了上述内容,浏览器现在会提示我输入用户名和密码。一旦我输入它,我就可以使用 User.Identity.Name 来获取用户名。但是我不希望弹出用户名/密码。我希望应用程序根据用户的网络凭据对用户进行身份验证。

我错过了什么吗?

【问题讨论】:

  • 你用什么浏览器测试过?只有 IE 会通过 Windows 用户名/密码验证。
  • 这不一定是真的 - FireFox 支持 Windows 集成身份验证。
  • 是的,Firefox 对此没有任何问题,它只是不像 IE 那样默认将本地主机名视为受信任/内联网区域 - 但它确实可以配置为。甚至还有一个现成的 ADM 模板供 FF 使用,我认为懒惰的系统管理员可以使用。
  • 这是检查清单顺便说一句:support.microsoft.com/kb/258063/en-us - 不确定,但在 IIS 中启用匿名身份验证也可能是个问题?

标签: asp.net windows security authentication


【解决方案1】:

您不想更改 we.config 文件中的任何配置。在IS服务器管理器中的站点身份验证中,只启用Windows身份验证,禁用其他身份验证。 enter image description here

Windows 身份验证需要您的 =windows 凭据来对用户进行身份验证。这就是提示登录的原因。为避免这种情况,您需要在客户端浏览器中将您的站点 IP 或域设置为可信任的 Intranet 站点。 为此;

1)转到浏览器设置 -> 打开代理设置 -> 安全 -> 本地 Intranet -> 站点 -> 高级

2)然后添加您的站点域或 IP 地址 enter image description here

现在看看清除浏览器缓存后你的问题是否正常。

这对我有用。 :)

也检查一下 Receiving login prompt using integrated windows authentication

【讨论】:

  • 不要多次发布相同的答案。
【解决方案2】:

您不想更改 we.config 文件中的任何配置。在IS服务器管理器中的站点身份验证中,只启用Windows身份验证,禁用其他身份验证。 enter image description here

Windows 身份验证需要您的 =windows 凭据来对用户进行身份验证。这就是提示登录的原因。为避免这种情况,您需要在客户端浏览器中将您的站点 IP 或域设置为可信任的 Intranet 站点。 为此;

1)转到浏览器设置 -> 打开代理设置 -> 安全 -> 本地 Intranet -> 站点 -> 高级

2)然后添加您的站点域或 IP 地址 enter image description here

现在看看清除浏览器缓存后你的问题是否正常。

这对我有用。 :)

【讨论】:

    【解决方案3】:

    我认为你不能从服务器应用程序控制它,它是浏览器功能来传递凭据,在 IE 中你可能会建议你的用户在 Internet 选项中选中“启用 Windows 集成身份验证”->高级

    【讨论】:

      【解决方案4】:

      您在 IIS 中的配置不正确 - 关闭匿名访问,然后集成身份验证将启动,假设您也在 web.config 中设置了它

      <configuration>
          <system.web>
              <authentication mode="Windows" />
          </system.web>
      </configuration>
      

      【讨论】:

        【解决方案5】:

        检查 Internet Explorer 是否知道该站点是本地 Intranet 区域的一部分。此外,在 Intranet 区域的设置下检查是否启用了自动登录。

        【讨论】:

          【解决方案6】:

          是否在 IE 的 Internet 选项中选择了“启用 Windows 集成身份验证”?

          您输入的 IUSR_ 和用户名是否对托管应用程序的目录具有读取和执行权限?

          应用程序的目录是驻留在 IIS 服务器上,还是位于 Windows 共享权限会发挥作用的共享上?

          【讨论】:

            【解决方案7】:

            您的网站使用什么 URL,IE 区域是什么?如果您的应用在 LocalIntranet 区域之外运行,则会阻止直通身份验证,始终提示输入用户/密码。

            【讨论】:

            • 我仍在尝试使用localhost/site 在本地访问它。它提示所有,IE,Firefox 和 Chrome
            • 您能否将相关的IIS日志添加到您的问题中-寻找401/200系列的日志项。也可以试试127.0.0.1/site 看看是否有提示?
            猜你喜欢
            • 2014-01-06
            • 1970-01-01
            • 2010-10-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-07-03
            相关资源
            最近更新 更多