我正在为我的公司工作,该网站可在我们的内部网络和互联网上使用。 而且我被问到一些对我来说似乎不可能的事情,但我想在实际说出来之前先问这个问题!
我们公司有两种类型的用户,实际上是在Active Directory中注册的用户(以及具有Windows登录帐户的用户)和那些没有用户的用户。
在我们的内部网络中,我们使用HTTPContext.Current.User.Identity.Name
给出的身份
通过此身份验证,我可以在Active Directory中检查用户是否确实存在并授权他访问该网站。这是通过我们的内部网络进行访问。这很好,因为每个通过内部网络访问网站的人都需要有一个AD帐户。
现在,主要问题是互联网接入!目前,我有一个弹出窗口显示并要求登录/密码(非常基本,对于不在AD上的每个人都一样,不要问我为什么,这是一个要求.....) 。如果用户提供了正确的登录密码,即使我们不知道他的真实身份,他也可以访问该网站。但我要问的是这个弹出窗口上有一个链接说“使用你的Windows凭据登录”。然后我需要检索凭证并检查AD是否正确。
在互联网上查看之后,我发现Windows身份基金应该管理多种身份识别方式,但我觉得这不是我需要的东西,对我想做的事情来说似乎有点过分!
有人试过吗?我知道(我告诉他们)这是一个非常奇怪的要求,但我说无论如何我都会看看......
[编辑2013/09/13] 我尝试了一些东西,但这不起作用也许你可以解释我为什么。 我在IIS中设置我的网站以允许匿名连接。我添加了一个带有登录表单的页面(用于基本身份验证,您可以访问而无需进行身份验证)以及指向web.config中配置的另一个页面的链接以拒绝匿名连接。 我正在跳,它会加密Internet Explorer窗口进行身份验证,但我只是获得了401 - 未经授权的访问。这是正常行为还是配置问题?
答案 0 :(得分:1)
如果我理解正确,你将面临两个困难:
我对每个问题都有一个建议:
使用放置在不同文件夹中的2个不同的web.config文件。使用Windows集成身份验证和其他FormsAuthentication。未经身份验证的用户首先登陆Windows集成模式登录页面,并在发生故障时回退到FormaAuthentication登录页面。
在FormsAuthentication登录页面中,询问用户名和密码,并使用DirectoryEntry类通过LDAP与您的AD进行通信。您不需要任何秘密凭据即可。您可以使用刚刚从用户收到的实际对。请问AD“我叫什么名字?”使用那些确切的凭据。如果成功,他们就可以了,如果没有,他们就没有。
答案 1 :(得分:0)
我为我公司的多个应用程序做了几乎完全相同的事情,我们解决了这个问题:
如果未针对Active Directory成功验证凭据,请检查凭据是否对您的自定义提供程序有效。
然后,我们还为在其域连接的计算机上进行身份验证的人员提供“自动登录”。这是IIS中的一个单独的应用程序,它配置了Windows身份验证。然后,所有计算机都设置为信任*.ourcompanyname.com
用于Intranet应用程序,然后,当该域上的站点请求Windows凭据时,计算机将自动提供。在这种情况下,我们检测身份,设置机器密钥加密的cookie,并重定向回原始应用程序。
在原始应用程序中,在登录之前,我们检查是否存在此cookie,解密它(两个应用程序共享一个机器密钥),并自动登录用户。
这给了我们以下结果: