我有一个Web门户,供员工更新他们的详细信息。人们使用他们的Active Directory凭据登录,我设置OWIN cookie进行身份验证。这一切都是通过MVC登录页面完成的,与IIS上的Windows身份验证无关。
现在公司浏览器是Internet Explorer,并配置为自动登录到其他Windows身份验证站点,而不提示输入密码。当人们使用公司PC并登录他们的域帐户时,就会发生这种情况。如果他们在家工作,则基本身份验证提示会要求在这些系统上提供凭据。
现在,我希望在用户登录到他们的Windows域帐户,从工作PC登录时实现自动身份验证,如果他们在家工作,则需要登录页面。
我知道401挑战和身份验证协商,但从未通过ASP.Net启动。我已经看到过将用户重定向到IIS配置为Windows身份验证的页面的解决方案,但我希望在没有IIS配置的情况下完成此操作。此外,我记得有人提到一个解决方案,其中一个页面被加载到<iframe>
,其中检查基本身份验证,如果通过该身份验证成功,则将已经过身份验证的用户重定向到登录页面。
所以我的问题归结为:是否有办法在控制器的特定操作上启动(并完成)401基本身份验证挑战?然后挂钩到Controller.User.Identity
属性来设置OWIN cookie?
UPD: 根据评论:我希望Kerberos(Windows身份验证)在用户位于域网络时工作,因此他们会自动登录。但是,当用户不在域网络上时,我不希望进行Windows身份验证,而是希望自定义登录页面包含密码重置和注册选项(给定员工验证)。
答案 0 :(得分:1)
如果我正确地阅读了您的问题,您可能需要执行以下操作......
1)创建2个授权过滤器:一个使用AD,另一个使用BasicAuthentication
2)按顺序放置它们。在您的情况下,如果我理解正确,您想先检查AD。如果AD身份验证失败,则您将故障转移到Basic one(这是您实施401 challenge的位置)。 要确保按所需顺序执行过滤器,请注意过滤器上的订单属性:https://msdn.microsoft.com/en-us/library/gg401854%28v=vs.98%29.aspx
3)无论您最终使用哪种过滤器(AD或BasicAuth),您都可以从那里设置OWIN cookie
希望有所帮助。