Iis服务器具有身份验证功能,可以通过以下方式进行验证:
匿名访问
该方法不验证访问用户的身份,并且客户端不需要提供任何身份验证凭据。服务器将此类访问视为匿名访问,并将所有此类访问用户映射到一个服务器帐户,通常为IUSER_MACHINE。
您可以修改映射到的用户:
集成windows身份验证
这种验证方法也分两种情况。
NTLM验证
这种验证方式需要将用户的用户名和密码发送到服务器,服务器验证用户名和密码是否与该用户在服务器中的密码一致。用户名以明码形式传输,但密码经过处理后得到一个8字节的密钥加密挑战码,然后再传输。
Verification of security authentication system developed by MIT
这种身份验证方法只将客户端访问IIS的身份验证票发送到IIS服务器。当IIS收到此票证时,它可以确定客户端的身份,而无需传输用户的密码。需要kerberos身份验证的用户必须是域用户。
每个登录用户在登录验证后,都会由域内的验证服务器生成一张票授权票(TGT),作为该用户访问其他服务的票授权票(这是为了实现所谓的一次登录即可访问域内所有需要验证的资源的单点登录SSO功能)。
访问IIS服务器的身份验证票是通过该用户的票授权票(TGT)从IIS获得的。之后,此客户端将在访问此IIS时使用此身份验证票。类似地,对需要验证的其他服务的访问也基于该TGT来获得该服务的验证票。
下面是kerberos更详细的原理。
Kerberos原则介绍:
工作站正在运行名为Kinit的票证授权服务,该服务专门用于工作站和认证服务器Kerberos之间的认证。
1.用户开始登录,输入用户名,验证服务器收到用户名,在用户数据库中查找用户,找到用户。
2.认证服务器生成在认证服务器和登录用户之间共享的会话密钥。该密码仅用于认证服务器和登录用户之间的相互认证。
同时,认证服务器为这个登录的用户生成一个授票票,以后工作站可以凭这个授票票向认证服务器请求其他票,而不需要再次验证其身份。
认证服务器使用登录用户的密码对{ session key+Ticket-Granting Ticket }进行加密,并将其发送回工作站。
3.工作站用自己的密码解密验证服务器返回的数据包。如果解密正确,则验证成功。解密后,可以获得由登录用户和认证服务器共享的会话密钥和票据授予票据。此时此刻,
登录的用户没有在网络上发送密码,认证服务器使用用用户密码加密认证授权票的方法对用户进行认证。用户和认证服务器之间的关系被建立,相应的身份证书也被保存在工作站上。将来,如果使用网络中的其他服务,
可以通过这个身份证书向验证服务器申请相应服务器的服务票,获得相应的服务认证。
4.如果用户第一次访问IIS服务器,工作站的kinit会检查本机没有访问IIS服务器的认证票,于是kinit会向认证服务器发送请求,请求访问IIS服务的认证票。Kinit首先需要生成一个验证器。
验证器是这样的:{用户名:工作站地址}用验证器和服务器之间的会话密钥加密。Kinit将验证器、票证授权票证、您的姓名、您的工作站地址和IIS服务名称发送到验证服务器,
认证服务器验证授权票是真实有效的,然后用与你共享的会话密钥解锁认证器,获得用户名和地址,并与发送请求的用户和地址进行比较。如果一致,说明认证通过,请求合法。
5. 验证服务器先生成这个用户跟IIS服务器之间的Session key会话口令,之后根据用户请求生成IIS服务器的验证票,是这个样子的:会话口令:用户名:用户机器地址:服务名:有效期:时间戳,
这个验证票用IIS服务器的密码(验证服务器知道所有授权服务的密码)进行加密形成最终的验证票。最后,验证服务器{会话口令加好密的验证票}用用户口令加密后发送给用户。
6. 工作站收到验证服务器返回的数据包,用自己的口令解密,获得跟IIS服务器的Session key和IIS服务器的验证票。
7. 工作站kinit同样要生成一个验证器,验证器是这样的:{用户名:工作站地址}用跟IIS服务器间的Session key加密。将验证器和IIS验证票一起发送到IIS服务器。
8.IIS服务器先用自己的服务器密码解开IIS验证票,如果解密成功,说明此验证票真实有效,然后查看此验证票是否在有效期内,在有效期内,用验证票中带的会话口令去解密验证器,获得其中的用户名和工作站地址,
如果跟验证票中的用户名和地址相符则说明发送此验证票的用户就是验证票的所有者,从而验证本次请求有效。
基本身份验证
这种验证方式完全是把用户名和明文用明文(经过base64编码,但是base64编码不是加密的,经过转换就能转换成原始的明文)传送到服务端验证。
服务器直接验证服务器本地是否用用户跟客户端提供的用户名和密码相匹配的,如果有则通过验证。