在公司环境中,当用户登录到他们的笔记本电脑时,他们可以自动通过内部网站的身份验证。
这是如何实现的?网站和浏览器如何知道用户是谁并对其进行身份验证?
有很多方法,但规范方法是通过Kerberos之类的协议。过程如下:
- 使用某种凭据登录到您的计算机,这些凭据会授予您所谓的票证授予票证(TGT(
- 打开浏览器,进入内部网站
https://internal/page.html
- 网站以
HTTP 401
错误代码和标题WWW-Authenticate: Negotiate
进行响应 - 浏览器检测到这一点,并调用操作系统的GSS/SSPI服务;请给我一张使用
negotiate
套餐前往http/internal
的机票"> - GSS/SSPI服务会看到您有一个TGT,并调用KDC(Active Directory(并请求一个到
http/internal
的票证 - KDC说";"确定";并将票据返回给客户端
- GSS/SSPI服务将票证转换为所谓的
AP-REQ
,将其封装在SPNEGO
消息中,并将其返回给浏览器 - 浏览器将其编码为base64,将其粘贴在
Authorization: Negotiate {base64}
标头中,然后重试对站点的请求 - 站点接收标头,检测到它是Negotiate,因此它将其传递给自己的GSS/SSPI服务
- 这些服务解码消息,提取AP-REQ,解密它,并验证它是否理解它
- 从票证中提取一个标识,并将其呈现给web应用程序内部
最终用户所做的只是(1(和(2(。客户端机器完成了剩下的工作。
然后,像SAML等人这样的更高级别协议可以依赖上面的流来向IdP验证您,然后IdP可以向您可能拥有的任何依赖方发送令牌。
前面提到了几种方法。一种是通过Windows集成身份验证和任何单一登录方法,如OKTA、Microsoft ADFS。
从用户的角度来看,这是一种非常好的体验,因为我们不需要记住那么多凭证