公司网络上的内部网站如何自动对用户进行身份验证?
How do internal websites on corporate networks automatically authenticate the users?
在公司环境中,当用户登录到他们的笔记本电脑时,他们可以自动通过内部网站的身份验证。
这是如何实现的?网站和浏览器如何知道用户是谁并对他们进行身份验证?
方法有很多种,但规范的方法是通过像 Kerberos 这样的协议。过程如下:
- 使用某种凭据登录您的计算机,这些凭据授予您所谓的 ticket-granting-ticket (TGT)。
- 您打开浏览器并转到内部网站
https://internal/page.html
。
- 网站响应
HTTP 401
错误代码和 header WWW-Authenticate: Negotiate
。
- 浏览器检测到这一点并调用 OS 的 GSS/SSPI 服务并说“请给我一张使用
negotiate
包的 http/internal
的票”。
- GSS/SSPI 服务看到您有一个 TGT 并调用 KDC (Active Directory) 并请求
http/internal
. 的票证
- KDC 说“确定”并且 returns 给客户的票。
- GSS/SSPI 服务将票据转换为所谓的
AP-REQ
,将其包装在 SPNEGO
消息中,然后 returns 将其发送到浏览器。
- 浏览器将其编码为 base64,将其粘贴在
Authorization: Negotiate {base64}
header 中并重试对站点的请求。
- 该站点收到 header,检测到它是协商的,因此它将它从它自己的 GSS/SSPI 服务中传递出去。
- 这些服务解码消息,提取 AP-REQ,解密,并验证它是否理解。
- 身份从票中提取并呈现给 Web 应用程序内部。
end-user 所做的只是 (1) 和 (2)。客户端机器完成了剩下的工作。
然后 higher-level SAML 等协议可以依靠上面的流程来向 IdP 验证您的身份,然后 IdP 可以将令牌发送给您可能拥有的任何依赖方。
如前所述,有两种方法。一种是通过 Windows 集成身份验证和任何单点登录方法,例如 OKTA、Microsoft ADFS。
从用户的角度来看,这是一个非常好的体验,因为我们不需要记住那么多凭据
在公司环境中,当用户登录到他们的笔记本电脑时,他们可以自动通过内部网站的身份验证。
这是如何实现的?网站和浏览器如何知道用户是谁并对他们进行身份验证?
方法有很多种,但规范的方法是通过像 Kerberos 这样的协议。过程如下:
- 使用某种凭据登录您的计算机,这些凭据授予您所谓的 ticket-granting-ticket (TGT)。
- 您打开浏览器并转到内部网站
https://internal/page.html
。 - 网站响应
HTTP 401
错误代码和 headerWWW-Authenticate: Negotiate
。 - 浏览器检测到这一点并调用 OS 的 GSS/SSPI 服务并说“请给我一张使用
negotiate
包的http/internal
的票”。 - GSS/SSPI 服务看到您有一个 TGT 并调用 KDC (Active Directory) 并请求
http/internal
. 的票证
- KDC 说“确定”并且 returns 给客户的票。
- GSS/SSPI 服务将票据转换为所谓的
AP-REQ
,将其包装在SPNEGO
消息中,然后 returns 将其发送到浏览器。 - 浏览器将其编码为 base64,将其粘贴在
Authorization: Negotiate {base64}
header 中并重试对站点的请求。 - 该站点收到 header,检测到它是协商的,因此它将它从它自己的 GSS/SSPI 服务中传递出去。
- 这些服务解码消息,提取 AP-REQ,解密,并验证它是否理解。
- 身份从票中提取并呈现给 Web 应用程序内部。
end-user 所做的只是 (1) 和 (2)。客户端机器完成了剩下的工作。
然后 higher-level SAML 等协议可以依靠上面的流程来向 IdP 验证您的身份,然后 IdP 可以将令牌发送给您可能拥有的任何依赖方。
如前所述,有两种方法。一种是通过 Windows 集成身份验证和任何单点登录方法,例如 OKTA、Microsoft ADFS。
从用户的角度来看,这是一个非常好的体验,因为我们不需要记住那么多凭据