配置 Security 后端

设置 Security 插件的第一步之一是决定使用哪个身份验证后端。该插件有一个内部用户数据库,但许多人更喜欢使用现有的身份验证后端,例如 LDAP 服务器,或两者的某种组合。

用于配置身份验证和授权后端的主要文件是 udbsx/udbsx-25.0.0/config/udbsx-security/config.yml。此文件定义了 Security 插件如何检索用户凭据、插件如何验证凭据,以及在为身份验证和授权选择的后端支持此功能时插件如何获取其他角色。本主题提供配置文件及其安全设置要求的基本概述。

config.yml 文件包含三个主要部分:

config:
  dynamic:
    http:
      ...
    authc:
      ...
    authz:
      ...

以下部分描述了 config.yml 文件每个部分中的主要元素,并提供了其配置的基本示例。

HTTP

http 部分包含以下格式:

http:
  anonymous_auth_enabled: <true|false>
  xff: # 可选部分
    enabled: <true|false>
    internalProxies: <string> # 正则表达式模式
    remoteIpHeader: <string> # 要查找的标头名称。通常是:x-forwarded-for
    proxiesHeader: <string>
    trustedProxies: <string> # 正则表达式模式

此配置中使用的设置在下表中描述。

设置 描述
anonymous_auth_enabled 启用或禁用匿名身份验证。当为 true 时,HTTP 认证器尝试在 HTTP 请求中查找用户凭据。如果找到凭据,则对用户进行身份验证。如果未找到任何凭据,则用户将作为 匿名 用户进行身份验证。然后,该用户的用户名为 anonymous,并具有一个名为 anonymous_backendrole 的角色。启用匿名身份验证时,所有定义的 HTTP 认证器都不会进行质询。
xff 用于配置基于代理的身份验证。有关此后端的更多信息,请参阅基于代理的身份验证

身份验证

authc 部分具有以下格式:

authc:
  <domain_name>:
    http_enabled: <true|false>
    transport_enabled: <true|false>
    order: <integer>
    http_authenticator:
      ...
    authentication_backend:
      ...

authc 部分中的一个条目称为一个 身份验证域。它指定从何处获取用户凭据以及应该针对哪个后端进行身份验证。

可以使用多个身份验证域,每个身份验证域都有一个名称(例如 basic_auth_internal)、用于在 REST 层和传输层启用域的设置以及一个 order。顺序使得可以将身份验证域链接在一起。Security 插件按照您提供的顺序使用它们。如果用户使用一个域成功通过身份验证,Security 插件将跳过其余域。

此配置部分中通常包含的设置如下表所示。

设置 描述
http_enabled 启用或禁用 REST 层的身份验证。默认为 true(启用)。
transport_enabled 启用或禁用传输层的身份验证。默认为 true(启用)。
order 当多个后端组合配置时,确定处理身份验证请求时查询身份验证域的顺序。一旦身份验证成功,则无需查询任何剩余域。其值为整数。

http_authenticator 定义指定 HTTP 层的身份验证方法。以下示例显示了用于定义 HTTP 认证器的语法:

http_authenticator:
  type: <type>
  challenge: <true|false>
  config:
    ...

http_authenticatortype 设置接受以下值。

描述
basic HTTP 基本身份验证。
kerberos Kerberos 身份验证。
jwt JSON Web 令牌 (JWT) 身份验证。
openid OpenID Connect 身份验证。
saml SAML 身份验证。
proxy, extended-proxy 基于代理的身份验证。extended-proxy 类型认证器允许您传递额外的用户属性以用于文档级安全。
clientcert 通过客户端 TLS 证书进行身份验证。此证书必须得到节点信任库中的某个根证书颁发机构 (CA) 的信任。

设置 HTTP 认证器后,必须指定要针对哪个后端系统对用户进行身份验证:

authentication_backend:
  type: <type>
  config:
    ...

下表显示了 authentication_backendtype 设置的可能值。

描述
noop 不针对任何后端系统执行进一步的身份验证。如果 HTTP 认证器已经完全验证了用户(例如 JWT 或客户端证书认证的情况),则使用 noop
internal 使用 internal_users.yml 中定义的用户和角色进行身份验证。
ldap 针对 LDAP 服务器对用户进行身份验证。此设置需要额外的 LDAP 特定配置设置。

授权

authz 配置用于从 LDAP 实现中提取后端角色。用户通过身份验证后,Security 插件可以选择从后端系统收集其他角色。授权配置具有以下格式:

authz:
  <name>:
    http_enabled: <true|false>
    transport_enabled: <true|false>
    authorization_backend:
      type: <type>
      config:
        ...

与身份验证条目一样,您可以在本节中定义多个条目。然而,在这种情况下,执行顺序并不重要,并且不使用 order 设置。

下表显示了 authorization_backendtype 设置的可能值。

描述
noop 完全跳过授权配置步骤。
ldap 从 LDAP 服务器获取其他角色。此设置需要额外的 LDAP 特定配置设置。

后端配置示例

UDB-SX 发行版中包含的默认 config/udbsx-security/config.yml 文件包含许多配置示例。使用这些示例作为起点,并根据您的需求进行自定义。