在针对LDAP进行身份验证时,如何使用Windows身份验证来获取凭据。

5
我有一个web门户,员工可以在其中更新自己的详细信息。人们使用他们的Active Directory凭据登录,并且我设置OWIN cookie进行身份验证。这一切都是通过MVC登录页面完成的,与IIS上的Windows身份验证无关。
现在公司浏览器是Internet Explorer,并配置为无需提示密码即可自动登录其他Windows身份验证站点。当人们使用公司PC并登录到其域帐户时,就会发生这种情况。如果他们在家中工作,则这些系统会询问凭据以进行基本身份验证提示。
现在,当用户从工作PC登录到其Windows域帐户时,我想实现自动身份验证,并在他们在家工作时呈现登录页面。
我知道401挑战和身份验证协商,但从未通过ASP.Net启动过此操作。我看到过解决方案,其中用户被重定向到IIS配置为Windows身份验证的页面,但我希望在没有IIS配置的情况下完成此操作。我记得有人提到过这样一个解决方案:将页面加载到<iframe>中,检查基本身份验证,如果该身份验证成功,则将已经通过身份验证的用户重定向到着陆页。
因此,我的问题可以归结为:是否有一种方法可以在控制器的特定操作上启动(和完成)基本身份验证的401挑战?然后钩入Controller.User.Identity属性设置OWIN cookie? 更新: 如评论所述:我希望在用户处于域网络时使用Kerberos(Windows身份验证),因此他们会自动登录。但是,当用户不在域网络上时,我不希望进行Windows身份验证,而是希望使用自定义登录页面,并提供密码重置和注册选项(考虑员工验证)。

使用VPN并让用户进入企业网络。他们将找到KDC并通过Kerberos进行身份验证。 - Michael-O
1
@Michael-O VPN绝对不可行。用户已经在使用终端服务器(RDP)登录到他们的域。 - trailmax
如果它们已经在网络中,那么你可能有一个网络设置问题。请注意,本机的Microsoft解决方案从不使用LDAP绑定,而是使用Kerberos/NTLM等。 - Michael-O
如果Kerberos仍然不能工作,那就说明你有网络问题。当自动登录无法正常工作时,你应该在客户机上运行Wireshark。 - Michael-O
1
现在清楚了,你的描述不够明确。 - Michael-O
显示剩余2条评论
1个回答

1
如果我正确理解了您的问题,您可能想要执行以下操作:
1)创建2个授权过滤器:一个使用AD,另一个使用BasicAuthentication。
2)按您想要的顺序放置它们。在您的情况下,如果我理解正确,您希望首先检查AD。如果AD身份验证失败,则切换到Basic身份验证(这就是您实现401挑战的地方)。为确保以您想要的顺序执行过滤器,请注意过滤器上的Order属性:https://msdn.microsoft.com/en-us/library/gg401854%28v=vs.98%29.aspx 3)无论您最终使用哪个过滤器(AD或BasicAuth),都可以从那里设置您的OWIN cookie。
希望这有所帮助。

问题出在 BasicAuthentication 过滤器的实现上。你怎么做呢? - trailmax
请您能具体一些吗?它的问题是什么?您是不是没有大致的想法,还是有特定的问题? - dee zg
这里是一个示例,说明如何完成它:http://www.ryadel.com/en/http-basic-authentication-asp-net-mvc-using-custom-actionfilter/ - dee zg
我不知道怎么做的一般思路。但是根据你给的链接,看起来非常简单。 - trailmax
是的,这很简单。您只需将筛选器连接到请求管道中,并检查您需要的内容(在本例中,它是基本身份验证标头),并根据检查结果返回结果。 - dee zg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接