公司网络上的内部网站如何自动对用户进行身份验证?

How do internal websites on corporate networks automatically authenticate the users?

在公司环境中,当用户登录到他们的笔记本电脑时,他们可以自动通过内部网站的身份验证。

这是如何实现的?网站和浏览器如何知道用户是谁并对他们进行身份验证?

方法有很多种,但规范的方法是通过像 Kerberos 这样的协议。过程如下:

  1. 使用某种凭据登录您的计算机,这些凭据授予您所谓的 ticket-granting-ticket (TGT)。
  2. 您打开浏览器并转到内部网站 https://internal/page.html
  3. 网站响应 HTTP 401 错误代码和 header WWW-Authenticate: Negotiate
  4. 浏览器检测到这一点并调用 OS 的 GSS/SSPI 服务并说“请给我一张使用 negotiate 包的 http/internal 的票”。
  5. GSS/SSPI 服务看到您有一个 TGT 并调用 KDC (Active Directory) 并请求 http/internal.
  6. 的票证
  7. KDC 说“确定”并且 returns 给客户的票。
  8. GSS/SSPI 服务将票据转换为所谓的 AP-REQ,将其包装在 SPNEGO 消息中,然后 returns 将其发送到浏览器。
  9. 浏览器将其编码为 base64,将其粘贴在 Authorization: Negotiate {base64} header 中并重试对站点的请求。
  10. 该站点收到 header,检测到它是协商的,因此它将它从它自己的 GSS/SSPI 服务中传递出去。
  11. 这些服务解码消息,提取 AP-REQ,解密,并验证它是否理解。
  12. 身份从票中提取并呈现给 Web 应用程序内部。

end-user 所做的只是 (1) 和 (2)。客户端机器完成了剩下的工作。

然后 higher-level SAML 等协议可以依靠上面的流程来向 IdP 验证您的身份,然后 IdP 可以将令牌发送给您可能拥有的任何依赖方。

如前所述,有两种方法。一种是通过 Windows 集成身份验证和任何单点登录方法,例如 OKTA、Microsoft ADFS。

从用户的角度来看,这是一个非常好的体验,因为我们不需要记住那么多凭据