【发布时间】:2010-11-29 08:53:42
【问题描述】:
感谢您的阅读和您的想法;这是一个棘手的问题,所以我想分享一下,看看这对于比我们更有经验的开发人员来说是否真的是一个公平的挑战。
我们正在为企业 Microsoft Active Directory 环境开发一个 Web 应用程序,并且我们使用 IIS 提供的 Windows 身份验证来对用户进行身份验证以进行单点登录,以及表单身份验证。我知道 IIS 在两者都启用时会报错,但它工作得很好,而且我们部署的每个站点都没有奇怪的怪癖可以解决 - 直到现在。
新站点具有“共享”机器,使用通用帐户永久登录,该帐户对他们需要使用的应用程序具有只读访问权限。这意味着我们无法区分应该对应用程序具有不同权限的用户;我们需要某种方式来提示用户提供身份验证详细信息。
第一次尝试是认真的谷歌搜索;世界上似乎没有其他人有我们的问题,除了一些被误导的灵魂向以太提问但没有得到回应。
在对 IIS 身份验证的工作方式进行了一番头脑风暴和讨论之后,似乎最直接的解决问题的方法是发出401 Unauthorized 以响应已知为共享帐户的用户。这里的初步测试似乎卓有成效,在浏览器中成功更改了用户名,但是该站点的原型没有提示输入凭据,并且浏览器保留了相同的帐户详细信息。我们还点击了特定于 IE 的 javascript
document.execCommand("ClearAuthenticationCache")
同样,它在实验室工作,但不在现场工作。对现场 IE 安全设置的进一步实验表明,如果 webapp 站点被排除在 Intranet 区域之外,浏览器将自动重新进行身份验证,无论使用何种方法来欺骗浏览器提示用户输入新帐户详细信息。
现在我们陷入了困境。我们有一些解决方法可以让它按时运行,但它们绝对不是“正确”的答案:
- 要求用户在登录我们的应用程序之前退出共享帐户 (...yuck)
- 从所有机器上的 Intranet Zone 中排除我们的 webapp
- 为用户提供非单点登录服务
我相信有一种规范的方法可以做到这一点 - 一种已知的模式,一个已经解决的常见基本问题,诸如此类 - 我很想知道有哪些创造性的方法可以解决这类问题,如果其他人真的经历过类似的事情。
【问题讨论】:
-
在这些机器上提供第二个 IE 快捷方式是否合适,并打开“使用不同的凭据运行”选项? - 因此从该快捷方式启动将提示输入新凭据
-
那么您是否考虑过使用其他浏览器?例如,FireFox 不知道 Single-Sing on 功能,但每次您第一次访问该页面时都会弹出一个登录输入表单...
-
@Yves M。我们在目标环境中非常受限;一切都相当官僚,微软工具包,甚至说服网站使用比 IE6 更新的浏览器版本也很困难。更改浏览器供应商不是一种选择:(
-
@Damien_The_Unbeliever 这是个好主意,该网站已经为我们设置了桌面快捷方式,并且为每个客户定制它可能很简单。谢谢!
-
您提到了表单身份验证和 Windows 身份验证。用户何时会使用表单登录您的应用?
标签: c# iis-7 active-directory ldap windows-authentication