配置身份代理以使用多个属性源进行身份验证

请按照此步骤配置身份代理,使用来自 LDAP、 PostgreSQL,、 Db2 和 Oracle Database 等来源的属性。

关于此任务

IBM® Verify可以将一个或多个本地数据源组合起来,作为. 的单一身份提供商。 此配置可让您的身份代理从一个或多个数据源进行身份验证并获取用户属性。

此配置支持的数据源包括:
  • LDAP
  • IBM Db2
  • PostgreSQL
  • Oracle Database
术语
认证源
您打算对其进行身份验证的数据源。
JavaScript 配置
一个本地配置文件,用于指定数据源的配置细节。
JavaScript 插件
用于处理与非主 LDAP 交互的代码。
初级 LDAP
内置了 LDAP 处理功能,因此无需为主要 LDAP 安装 JavaScript 插件。
替代数据来源
一个或多个额外数据源,可与主要数据源 LDAP 配合使用,或替代该数据源。
注意: 最多可使用 10 个数据源,且顺序不限,但主数据源( LDAP )与备用数据源的配置有所不同。

过程

  1. 选择 “集成” > “身份代理”
  2. 选择 “创建代理配置”
  3. 选择 “身份验证 ”作为用途。
  4. 选择“ LDAP ”磁贴。
  5. 选择 “下一步”
  6. 配置连接设置
    提供以下信息以定义 LDAP 连接属性。
    注意: 主 LDAP 是可选的,不必作为身份验证来源。 如果您不想使用主 LDAP ,请在此部分使用占位值。 如果您选择不使用主 LDAP ,则必须在某个 JavaScript 配置中指定以下代码。
    "authenticationSource":{
    "isAuthenticationSource": false,
          "disablePrimaryLDAPLookup": false
        },
    
    外部 LDAP 主机 URI
    此属性是本地 LDAP 服务器连接信息。 对于集群 LDAP 故障转移设置,可以通过选择添加 URI 来添加多个 LDAP 服务器 URI。
    基本
    此属性是用户的 LDAP 容器搜索条件。
    LDAP 绑定 DN
    此属性是 LDAP 服务器连接用户。
    LDAP 绑定密码
    此属性是 LDAP 服务器连接密码。
    LDAP 认证中心证书
    此可选属性是在本地代理程序需要与 LDAP 服务器进行 TLS 连接时使用的 SSL 证书。
    查看其他设置
    您可以定义以下设置。
    • 启用 LDAP 是否需要 TLS。
    • LDAP 服务器的最大同时 LDAP 连接数。
    • 成功的密码认证结果会被缓存多长时间。
    • 保持连接的时长。
    • 在 LDAP 服务器关闭连接之前的空闲时间。
    • 处理请求的最长时间。
  7. 单击下一步
  8. 提供用户属性。
    属性
    此属性是从成功密码验证操作返回的 LDAP 用户属性的逗号分隔列表。 对于 LDAP 的主要属性,请使用 LDAP 属性名称。 对于其他数据源,请在用户属性的名称前加上预期返回该属性的 JavaScript 插件的名称 格式为 pluginName-Attribute。 例如,如果你设置
    "pluginName": "OcPlug",
    那么,由该方法 OcPlug 返回的任何属性都必须以 OcPlug-. 作为前缀。 例如, OcPlugin-mobile 该指令会指示 JavaScript 插件 OcPlug 检索“mobile”的值。
    属性必须用逗号分隔。 例如,
    givenName, sh, displayName, manager, mail, mobile,
    memberOf, uid, OcPlug-OCD_SPEC_ID, db2PLUG-
    XTENDEDATTR, ldap-seeAlso
    注: 此示例演示了如何指定插件属性。 没有前缀的属性(如 givenName, sn, displayName, manager, mail, mobile memberOf,, 和 uid )源自主 LDAP。 seeAlsoOCD_SPEC_IDOcPlug 返回该属性, db2Plug 返回该属性 XTENDEDATTR ,而“ldap”插件返回该属性。
    二进制属性
    此属性是从成功密码验证操作返回的二进制 LDAP 用户属性的逗号分隔列表。
    用户名属性
    此属性是用于查找用户以进行密码验证的命名属性,例如 user id
    注意: 用户名标识符属性区分大小写。 该默认属性 samAccountName 适用于早期版本的 Windows Active Directory。 对于 2016 版及更高版本的 Active Directory ,该属性为 sAMAAccountName.
    对象类
    此属性是 LDAP 用户可以具有的对象类的逗号分隔列表。 对象类和 username 属性配合用于查找用户以进行密码验证。
    注意: 二进制属性、用户名属性以及对象类原本是为主要 LDAP 设计的,但它们都会传递给 JavaScript 插件,因此必须由插件实现手动处理。
  9. 选择 “下一步”
  10. 将身份提供商的属性映射到 Cloud Directory 的 Verify 属性。
    创建身份代理后,您可以通过代理磁贴上的编辑功能 “画笔”图标 来更改或更新映射。
  11. 选择 “下一步”
  12. “完成配置 ”中,请提供以下信息。
    • 代理程序的唯一可识别名称
    • 描述
    • 身份提供商的显示名称
    • 身份提供商的域
  13. 可选: 选择 “查看高级设置 ”以添加配置属性或选择用于加密的证书。
    注意: 高级设置主要供主 LDAP 使用,但也会传递给 JavaScript 插件,以便进行手动处理。
  14. 点击 “保存并继续 ”。
  15. “下一步” 中,请执行以下操作。
    1. 选择 “查看 API 凭据 ”,然后点击“复制到剪贴板”图标,将客户端 ID 和客户端密钥复制并保存下来。
      注意: 只有具备相应权限的用户才能查看客户端密钥。 如需了解更多信息,请参阅 “授权的安全更新”
    2. 如果尚未下载,请从 IBM 容器存储库(ICR)下载桥接代理。 请参阅 Docker 上的《安装和配置 Verify Bridge》
    3. 将 API 凭证添加到代理程序配置。
  16. 单击 “完成”
    该配置已添加到身份代理中,身份提供商已列“身份验证 > 身份提供商 ”下
  17. 配置 JavaScript 插件。
    该桥接程序会搜索以下相对于自身所在目录的目录。
    • ./jsconfig/ - 配置文件的位置。
    • ./jsplugins/ - JavaScript 插件的位置。

    要让 Docker 容器能够访问这些目录,您可以从主机文件系统执行绑定挂载。

    volumes:
                    - ./jsconfig:/go/src/jsconfig:ro
                    - ./jsplugins:/go/src/jsplugins:ro
    
    此示例展示了 Oracle 数据库插件的配置。
    {
        "pluginName": "OcPlug",
        "pluginType": "oracledb",
        "executionOrder": 1,
        "hardFail": true,
        "authenticationSource": {
          "isAuthenticationSource": true,
          "disablePrimaryLDAPLookup": false
        },
        "bindingConfig": {
          "connectionString": "oracle://system:oraclepass@host.docker.internal:1521/XE?CONNECTION TIMEOUT=5",
          "maxPoolSize": 50,
          "minPoolSize": 10,
          "agedTimeout": 60,
          "maxIdleTime": 10
        },
        "custom": {
          "table": "users"
        }
      }
    
    以下示例展示了 LDAP 插件的配置。
    {
        "pluginName": "plugin1",
        "pluginType": "ldap",
        "executionOrder": 1,
        "hardFail": false,
        "authenticationSource": {
          "isAuthenticationSource": true,
          "disablePrimaryLDAPLookup": false
        },
        "bindingConfig": {
          "bindDn": "cn=admin,dc=ibm,dc=com",
          "bindPassword": "pass",
          "uris": [
            "ldaps://localhost:8636",
            "ldap://localhost:8389"
          ],
          "maxPoolSize": 50,
          "agedTimeout": 60,
          "connectTimeout": 5,
          "filter": "(|(|(objectclass=ePerson)(objectclass=person))(objectclass=User))", 
          "userObjectClasses": "top,Person,organizationalPerson,inetOrgPerson",
          "selector": "objectClass,cn,sn,givenName,userPassword,streetAddress,seeAlso,mobile", 
          "userIdentifier": "uid",
          "baseDn": "dc=ibm,dc=com",
          "tlsConfig": {
            "caCert": "-----BEGIN CERTIFICATE-----\nMIIDbzCCAlegAwIBAgIULjAe6hySQZ8C8d1LnWKHlpirro4wDQYJKoZIhvcNAQEL\nBQAwRzELMAkGA1UEBhMC…",
            "insecureSkipVerify": false,
            "tlsMinVersion": 0,
            "clientCertLabel": "extauthn.client"
          }
        },
        "custom": {
          "table": "users"
        }
      }
    

    该表列出了配置插件的属性。

    属性 定义
    pluginName 插件的名称。 该桥接程序会以桥接程序可执行文件为基准,搜索 ./jsplugins/<pluginName>.js 此文件。
    pluginType
    • OracleDB
    • postgres
    • Db2
    • ldap
    执行令 插件的运行顺序。 从低到高。
    hardFail false如果在检索属性时发生错误,Bridge 将跳过此插件。 否则,将返回错误,认证失败
    isAuthenticationSource 如果此插件是进行身份验证的位置,请将其设置为 true
    注意: 将此属性设置为 true 会自动导致插件发生严重故障。
    disablePrimaryLDAPLookup 禁用主 LDAP。
    connectionString 适用于您数据库的连接字符串。 适用于
    • Db2
    • PostgreSQL
    • Oracle Database.

    若为 LDAP ,请留空。

    仅 LDAP
    过滤器 LDAP 过滤器。
    bindDn 绑定 DN。
    bindPassword 绑定密码。
    URI LDAP URI。 您可以为故障转移场景指定多个选项。 请为 TLS 指定协议 ldaps
    userObjectClasses 用户对象选择器。
    选择器 选择器。 您所需的用户属性应显示在此处。
    userIdentifier 在执行标准查询时使用的标识符。
    baseDn 在目录结构中开始搜索的位置。
    caCert 用于验证 LDAP 服务器提交的证书的CA证书。
    insecureSkipVerify 跳过对 TLS 的证书验证。
    tlsMinVersion

    最低 TLS 版本

    • 769 – v1.0
    • 770 – v.1.1
    • 771 – v1.2 (默认)
    • 772 – v1.3
    clientCertLabel

    用于 MTLS. 这是用于对发送到 LDAP 服务器的流量进行签名的证书和密钥的标识。

    代理在以下位置搜索证书:

    /cert/<clientCertLabel>_cert.pem /cert/<clientCertLabel>_key.pem

    定制 可通过配置传递给插件以供手动处理的自定义值。
    连接字符串示例。
    Db2
    HOSTNAME=host.docker.internal;PORT=50000;UID=db2inst1;PWD=db2_password;DATABASE=usersdb"
    PostgreSQL
    host=host.docker.internal port=8788 dbname=postgres user=postgres password=postgrespassword connect_timeout=5
    LDAP TLS
    若要使用 TLS 通过 JavaScript 插件连接到 LDAP ,请确保在 部分中 uris 指定 ldaps:// ,并指定一个有效的 caCert.
    "uris": [
            "ldaps://localhost:8636"
          ],
    
    若要在 LDAP 插件中执行MTLS,您可以通过绑定挂载,将客户端证书和客户端证书私钥放置在容器的目录中 /cert/
    - ./cert/:/cert:ro
    请确保证书名称的格式为 <clientCertLabel>_cert.pem<clientCertLabel>_key.pem,其中 clientCertLabel 是 LDAP 插件的插件配置中指定的。 clientCertLabel