使用 SPNEGO Web 认证针对 HTTP 请求进行单点登录
可通过对 WebSphere® Application Server 使用简单且受保护的 GSS-API 协商机制 (SPNEGO) 作为 Web 认证服务,以安全地协商和认证针对 WebSphere Application Server 中的受保护资源的 HTTP 请求。
下列各节更详细地描述了 SPNEGO Web 认证:
什么是 SPNEGO?
SPNEGO 是简单且受保护的 GSS-API 协商机制 (IETF RFC 2478) 中定义的一种标准规范。
如果启用了 Liberty 服务器安全性和 SPNEGO Web 认证,那么系统会在处理第一个入站 HTTP 请求时初始化 SPNEGO。如果未指定认证过滤器,或指定了认证过滤器并且满足条件,那么 SPNEGO 负责认证对 HTTP 请求中标识的受保护资源的访问。
- 支持 IETF RFC 2478 中定义的 SPNEGO Web 认证机制的客户机应用程序(例如,Microsoft .NET 或 Web Service 和 J2EE 客户机)。Microsoft Internet Explorer 和 Mozilla Firefox 是浏览器示例。要使用的任何浏览器必须配置为使用 SPNEGO Web 认证机制。
HTTP 请求的认证由用户(客户端)触发,这会生成 SPNEGO 令牌。WebSphere Application Server 接收此令牌。具体地说,SPNEGO Web 认证通过 SPNEGO 令牌对用户身份解码并进行检索。然后使用该身份制定权限决策。
SPNEGO Web 认证是 WebSphere Application Server 中的服务器端解决方案。客户端应用程序负责生成 SPNEGO 令牌供 SPNEGO Web 认证使用。WebSphere Application Server 安全注册表中的用户身份必须与 SPNEGO Web 认证检索的身份完全相同。当 Microsoft Windows Active Directory 服务器是 WebSphere Application Server 中使用的“轻量级目录访问协议”(LDAP) 服务器时,该标识就会完全匹配。定制登录模块是作为插件提供的,用来支持从 Active Directory 到 WebSphere Application Server 安全性注册表的定制身份映射。
WebSphere Application Server 会对照其安全注册表验证身份。如果验证成功,那么系统会检索客户机 GSS 授权凭证并放置在客户机主体集中,并创建轻量级第三方认证 (LTPA) 安全令牌。然后,它会在 HTTP 响应中将 LTPA cookie 返回给用户。来自同一用户的后续 HTTP 请求(要求访问 WebSphere Application Server 中的更多受保护资源)使用先前创建的 LTPA 安全令牌以避免重复登录提问。
单个 Kerberos 域中的 SPNEGO Web 认证
SPNEGO Web 认证在单个 Kerberos 域中受支持。下图中显示了提问应答握手过程:

在上图中,发生了下列事件:
- 首先,用户从工作站登录 Microsoft 域控制器 MYDOMAIN.EXAMPLE.COM。
- 然后,用户尝试访问 Web 应用程序。用户使用客户机浏览器请求受保护的 Web 资源,这会向 Liberty 服务器发送 HTTP GET 请求。
- Liberty 服务器中的 SPNEGO 认证使用包含 Authenticate: Negotiate 状态的 HTTP 401 提问头应答客户机浏览器。
- 客户机浏览器会识别协商头,因为客户机浏览器配置为支持集成 Windows 认证。客户机针对主机名解析所请求的 URL。客户机使用主机名构成目标 Kerberos 服务主体名称 (SPN) HTTP/myLibertyMachine.example.com,以请求来自 Microsoft Kerberos KDC (TGS_REQ) 中的 Kerberos 凭单授予服务 (TGS) 的 Kerberos 服务凭单。然后,TGS 对客户机发出 Kerberos 服务凭单 (TGS_REP)。Kerberos 服务凭单(SPNEGO 令牌)对该服务(Liberty 服务器)证明用户的身份和许可权。
- 然后,通过使用执行先前步骤时在请求 HTTP 标头中获取的 SPNEGO 令牌,客户机浏览器可回应 Liberty 服务器的认证:协商提问。
- Liberty 服务器中的 SPNEGO 认证查看带有 SPNEGO 令牌的 HTTP 标头,验证 SPNEGO 令牌,并获取用户的身份(主体)。
- Liberty 服务器获取用户身份后,它会在其用户注册表中验证该用户并执行授权检查。
- 如果授予访问权,那么 Liberty 服务器会发送带有 HTTP 200 的响应。Liberty 服务器还会在响应中包含 LTPA cookie。此 LTPA cookie 用于后续请求。
可信 Kerberos 域中的 SPNEGO Web 认证
SPNEGO Web 认证在可信 Kerberos 域中也受支持。下图中显示了提问应答握手过程:

在上图中,发生了下列事件:
- 用户登录 Microsoft 域控制器 TRUSTEDREALM.ACME.COM。
- 在客户机浏览器中,用户发出针对在原始 Microsoft 域控制器 MYDOMAIN.EXAMPLE.COM 中的 Liberty 服务器上托管的受保护 Web 资源的请求。
- Liberty 服务器使用包含 Authenticate: Negotiate 状态的 HTTP 401 提问头应答客户机浏览器。
- 客户机浏览器配置为支持集成 Windows 认证。客户机浏览器通过使用托管 Liberty 服务器应用程序的工作站的主机名来解析 URL。客户机浏览器使用主机名作为属性,以请求来自域 TRUSTEDREALM.ACME.COM 的用于 MYDOMAIN.EXAMPLE.COM 的 Kerberos 跨域凭单 (TGS_REQ)。
- 客户机浏览器使用步骤 4 中的 Kerberos 跨域凭单请求来自域 MYDOMAIN.EXAMPLE.COM 的 Kerberos 服务凭单。Kerberos 服务凭单(SPNEGO 令牌)对该服务(Liberty 服务器)证明用户的身份和许可权。
- 然后,通过使用执行先前步骤时在请求 HTTP 标头中获取的 SPNEGO 令牌,客户机浏览器可回应 Liberty 服务器的认证:协商提问。
- Liberty 服务器接收请求并检查带有 SPNEGO 令牌的 HTTP 标头。然后,它会抽取 Kerberos 服务凭单,验证该凭单,并获取用户的身份(主体)。
- Liberty 服务器获取用户身份后,它会在其用户注册表中验证该用户并执行授权检查。
- 如果授予访问权,那么 Liberty 服务器会发送带有 HTTP 200 的响应。Liberty 服务器还会在响应中包含 LTPA cookie。此 LTPA cookie 用于后续请求。
在可信 Kerberos 域环境中,应注意必须在每个 Kerberos KDC 上完成 Kerberos 可信域设置。请参阅 Kerberos Administrator and User's Guide,以获取有关如何设置 Kerberos 可信域的更多信息。
有关向浏览器客户机或非浏览器客户机进行 SPNEGO Web 认证的支持信息
- 跨林信任
- 同一林中的域信任
- Kerberos 域信任
- 林外部信任
- 域外部信任
SPNEGO 认证可使用 SPNEGO 令牌或 Kerberos 服务凭单(Kerberos 令牌)认证。
有关在 Liberty 服务器上配置 SPNEGO 的进一步信息,请参阅在 Liberty 中配置 SPNEGO 认证。