2

我的 Intranet 上有一个管理网站,目前通过 IIS使用集成 Windows 身份验证。我们希望将此应用程序移至公共网站并使用 SSL 保护它,以便我们的用户可以从任何地方访问它。

我一直计划使用 HttpModule 从 http 重定向到 https,但它看起来不适用于集成身份验证(登录弹出窗口出现在重定向之前)。

我是否在 IIS 中使用“需要 SSL”复选框?这似乎不是那么用户友好,因为如果用户忘记使用 https URL,他们会得到一个漂亮的胖错误页面而不是温和的重定向。

在这个情况下,你会怎么做?

4

2 回答 2

6

我每次都将其作为 IIS 问题解决,而不是代码问题:

  • 在 IIS 中创建一个新网站
  • 将其绑定到相同的 IP 地址(和/或主机标头)、您的 SSL 证书和端口 443
  • 将此配置为指向与当前端口 80 站点相同的应用程序根目录
  • 测试以确保直接连接到https://site会给出预期的响应
  • 重新配置原始站点(仍绑定到端口 80)以使用 HTTP 重定向功能
  • 配置80端口站点重定向到443端口站点;可选地,删除应用程序和虚拟目录映射(以防有人意外禁用重定向)

从那时起,任何只需在浏览器中输入网站地址的用户都会从 IIS 收到一条闪电般的重定向消息,该消息会将他们发送到受 SSL 保护的网站版本。

于 2010-10-27T18:59:39.020 回答
3

我们在 Intranet 站点上遇到了类似的问题,最终从集成 Windows 身份验证切换到直接在站点上请求他们的网络用户名/密码。这样我们就可以将它们重定向到 HTTPS 或其他类似的东西,而不必担心身份验证弹出窗口何时出现。

我们有一些与此类似的代码(假设您使用的是 ASP.NET)对用户进行身份验证,然后我们将身份验证状态存储在 cookie 中。

public static bool AuthenticateUser(string username, string password)
{
    System.DirectoryServices.DirectoryEntry _entry = new System.DirectoryServices.DirectoryEntry(ldap_path, username, password, System.DirectoryServices.AuthenticationTypes.Delegation);

    bool _authenticated = false;
    try
    {
        Object _o = _entry.NativeObject;
        _authenticated = true;
    }
    catch
    {
        _authenticated = false;
    }
    finally
    {
        // Avoids the "multiple connections to server not allowed" error.
        _entry.Close();
        _entry.Dispose();
    }

    return _authenticated;
}

通过处理应用程序中的所有身份验证而不是依赖于 IIS,它最终为我们节省了大量的头痛和挫败感。

于 2009-10-21T20:14:47.087 回答