2009-10-20 117 views
2

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

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

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

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

回答

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我们节省吨头痛和无奈。

+0

感谢您的回复。无论如何,我开始倾向于关闭集成身份验证,因为它知道它可能无法在建筑物外工作。 – 2009-10-21 21:20:27

+0

是否有任何特定的原因,您决定不使用会员提供商的功能,并推出自己的? – 2009-10-22 17:33:49

+0

我们已经有了一个长期存在的数据结构,它不会与标准的.NET成员资格提供程序功能一起工作。 我们可以实现自己的继承自MembershipProvider的类,但我们不需要它所需的所有属性和方法,所以我们决定改为创建自己的精简版。 – JoshMock 2009-10-23 17:13:43

6

我每次都解决了这个作为一个IIS问题,而不是一个代码问题:

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

从此,这只是类型的网站地址为他们的浏览器将会从IIS快如闪电的重定向消息的任何用户将它们发送到网站的受SSL保护的版本。