对OWS和REST服务的身份验证

OWS和REST服务是无状态的,没有“会话”的固有意识,因此这些服务的身份验证方案要求客户机在每个请求上提供凭据。也就是说,支持“会话集成”,这意味着如果服务器上已经存在会话(从并发服务器 authenticated web admin session )它将用于身份验证。这个方案允许geoserver避免为OWS和REST服务创建会话的开销。

默认的地理服务器配置支持 HTTP Basic authentication 服务。

认证的典型过程如下:

  1. 用户在不提供任何凭据的情况下发出服务请求

  2. 如果用户正在访问不安全的资源,那么请求将被正常处理。

  3. 如果用户正在访问安全资源:

  • HTTP 401状态代码被发送回客户机,通常强制客户机提示提供凭据。

  • 然后重复服务请求,包括适当的凭证,通常在HTTP头中与基本身份验证一样。

  • 如果用户有足够的权限访问资源,那么请求将被正常处理,否则,HTTP 404状态代码将返回给客户机。

  1. 后续请求应包括原始用户凭据

实例

以下描述了OWS服务的身份验证链:

../../_images/auth_chain_ogc1.png

OWS服务认证链

在本例中,过滤器链由三个过滤器组成:

  • 会话 -处理“会话集成”,识别现有会话(但 not 创建新会话)

  • 基本身份验证 -从请求HTTP头提取基本身份验证凭据

  • 匿名 -处理匿名访问

提供者链由两个提供者组成:

  • Root -:ref:`security_root`有一个特殊的“超级用户”提供程序。由于很少使用此帐户,因此很少调用此提供程序。

  • Username/password -对用户数据库执行用户名/密码验证

为了说明各种链的元素是如何工作的,下面是一些OWS请求示例。

匿名WMS getCapabilities请求

此示例显示了WMS客户机发出匿名getCapabilities请求的过程。

../../_images/auth_chain_ogc2.png

发出匿名getcapabilities请求的WMS客户端的身份验证链

这个 会话 筛选器查找现有会话,但未找到任何会话,因此继续处理。这个 基本身份验证 筛选器在请求中查找基本授权头,但由于请求是匿名的,因此筛选器找不到任何授权头。最后, 匿名 过滤器以匿名方式执行和验证请求。因为getCapabilities是一个“发现”操作,所以它通常不会被锁定,即使在安全服务器上也是如此。假设这里是这种情况,匿名请求会成功,将功能响应返回给客户机。未调用提供程序链。

安全层的匿名wms getmap请求

此示例显示当WMS客户端为安全层发出匿名getmap请求时调用的进程。

链的执行与上面描述的完全相同。这个 会话 筛选器查找现有会话,但未找到任何会话,因此继续处理。这个 基本身份验证 筛选器在请求中查找基本授权头,但由于请求是匿名的,因此筛选器找不到任何授权头。最后, 匿名 过滤器以匿名方式执行和验证请求。但是,在这种情况下,被访问的层是一个安全的资源,因此处理getmap请求失败。服务器返回一个伴随着HTTP401状态代码的异常,这通常会触发客户机向用户显示一个登录对话框。

具有用户提供凭据的WMS Getmap请求

此示例显示当WMS客户端从用户收集凭据并重新发出上一个安全层请求时调用的过程。

../../_images/auth_chain_ogc3.png

Authentication chain for a WMS client making a GetMap request with user-supplied credentials

这个 会话 过滤器按照上面的描述执行,什么也不做。这个 基本身份验证 筛选器在请求中查找授权头,提取其凭据,并调用提供程序链。处理移动到 Username/password 执行实际身份验证的提供程序。如果凭证具有访问层所需的特权,则请求的处理将正常继续,并且getmap请求将成功,返回map响应。如果凭据不够,则将改为提供HTTP 401状态代码,这可能会再次触发客户端的登录对话框。