集成Windows身份验证& SSL

时间:2009-10-20 18:03:20

标签: asp.net ssl integrated-security

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

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

我是否坚持使用IIS中的“require SSL”复选框?这似乎不是所有用户友好的,因为如果他们忘记使用https URL,用户会得到一个很好的胖错误页面而不是温和的重定向。

在这种情况下你会做什么?

2 个答案:

答案 0 :(得分:6)

我每次都解决这个问题,而不是代码问题:

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

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

答案 1 :(得分: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,最终为我们节省了大量的头痛和挫败感。