在针对LDAP进行身份验证时挂钩进入Windows身份验证以获取凭据

tra*_*max 5 authentication windows-authentication owin asp.net-mvc-5

我有一个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身份验证,而是希望自定义登录页面包含密码重置和注册选项(给定员工验证).

dee*_* zg 1

如果我正确地阅读了你的问题,你可能想做如下的事情......

1)创建2个授权过滤器:一个使用AD,一个使用BasicAuthentication

2)按照你想要的顺序排列它们。就你而言,如果我理解正确的话,你想先检查 AD。如果 AD 身份验证失败,您将故障转移到基本身份验证(这是您实施 401 质询的地方)。为了确保过滤器按照您想要的顺序执行,请注意过滤器上的 Order 属性:https://msdn.microsoft.com/en-us/library/gg401854%28v=vs.98%29.aspx

3) 无论您最终使用哪种过滤器(AD 或 BasicAuth),您都可以从那里设置您的 OWIN cookie

希望有帮助。