Windows身份认证想必大家都很常用,包括现在的一些安全设备、网监设备等等都会集成Windows的认证,所以我今天归纳了一下Windows身份认证的原理帮助大家更透彻的理解其中的奥秘。
我们实现的windows集成身份认证分为代理和非代理两种方式,代理方式下使用NTLM认证协议,实现客户端的单点登录,非代理下使用kerberos协议,实现客户端的单点登录。 非代理方式下的集成身份认证: 所需环境:samba、apache、mod_auth_kerb.so(apache的插件)。 Samba:用于把AC加入域,并获取keytab文件,可以认为是kerberos的公钥。 某公司:用于访问控制,在客户端访问我们的时候向客户端索要票据,用于辨别客户端身份。 Mod_auth_kerb.so:使用kertab解密客户端提供的票据文件,获取客户端的用户信息。 在页面配置好我们所需的信息后,jointoAD.sh脚本负责把我们的设备加入windows域,获取keytab文件,对特定目录设置apache的访问控制权限,当访问该目录时需要提供客户端的用户信息,核实无误后才允许访问。
下面介绍详细的认证过程: 1、 当客户端在访问网络的时候,经过我们的AC设备。 2、 我们判断客户端未认证通过,因此我们会把客户端的访问请求截获,并回复一段我们自己的内容给客户端浏览器。 3、 客户端浏览器收到该内容后会根据我们的回复内容访问我们apache的特定目录。 4、 某公司会向客户端浏览器索要票据来验证客户端是否有权限访问我们apache(401请求)。 5、 客户端浏览器在收到该请求后,会将当前用户的信息加密后发送给我们apache。 6、 某公司收到信息后,调用mod_auth_kerb解密用户信息,获取到客户端的用户名和ip,发送给authd认证上线。从而完成整个的认证过程。
注意事项: 1、 windows集成身份认证只适用于windows设备,liunux和macPC不支持。 2、 客户端浏览器提交用户信息给我们依赖于如下浏览器设置:
由于这两项都是浏览器默认的,所以一般情况下我们不需要要单独设置用户浏览器。 我们可以看到,默认只有属于Intranet区域时浏览器才可以自动提交用户信息给我们。 当我们加入域后,浏览器通过机器名访问我们的apache时会识别为Intranet区域,因此我们才能完成集成windows身份认证。
3、 firefox默认不支持集成windows身份认证。 可以通过如下设置实现:
在该项填写我们AC的主机名即可。
4、 最近发现在IE11的某个版本里面的高级选项卡里:集成windows身份认证下面有一个增强保护模式被勾选上了,如图:
该选项会导致我们集成身份认证失败,并且弹出认证框给用户。IE11的后续版本已禁用该功能。
l 代理模式下的集成身份认证(我们自己做http显示代理) 环境:webcache、winbindd。 该原理即是NTLM认证的原理,类似外部密码认证,有我们将获取到的用户信息拿到AD域服务器上面去做认证,并根据认证结果做相应的操作。
与kerberos不同的是,代理模式下是由webcache在判断用户未通过认证时,回复407给客户端,有客户端提交认证信息给webcache,webcache将该信息提交给winbindd,由winbindd把登录信息拿到AD域上验证并把验证结果返回webcache,从而进一步操作。 |