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

使用此程序可配置身份代理,使其具有 LDAP、PostgreSQL, Db2 和Oracle Database等来源的属性。

关于此任务

一个或多个本地数据源的组合可用作 IBM® Verify的单个身份提供者。 此配置使身份代理程序能够对一个或多个数据源中的用户属性进行认证和源。

此配置支持的数据源包括:
  • LDAP
  • IBM Db2
  • PostgreSQL
  • Oracle Database
术语
认证源
要对其执行认证的数据源。
JavaScript 配置
本地配置文件,用于指定数据源的配置详细信息。
JavaScript 插件
用于处理与非主 LDAP 的交互的代码。
主 LDAP
内置 LDAP 处理,主 LDAP 不需要 JavaScript 插件。
备用数据源
要与主 LDAP 一起使用或代替主 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 检索移动值。
    属性必须以逗号分隔。 例如,
    givenName, sh, displayName, manager, mail, mobile,
    memberOf, uid, OcPlug-OCD_SPEC_ID, db2PLUG-
    XTENDEDATTR, ldap-seeAlso
    注: 此示例演示如何指定插件属性。 不带前缀的属性 (例如 givenNamesndisplayNamemanager mailmobilememberOfuid ) 源自主 LDAP。 OcPlug 返回属性 OCD_SPEC_ID, db2Plug 返回属性 XTENDEDATTR ,插件 "ldap" 返回属性 seeAlso
    二进制属性
    此属性是从成功密码验证操作返回的二进制 LDAP 用户属性的逗号分隔列表。
    用户名属性
    此属性是用于查找用户以进行密码验证的命名属性,例如 user id
    注: 用户名标识属性区分大小写。 缺省属性 samAccountName 适用于 Windows Active Directory的较早版本。 对于 Active Directory 2016 和更高版本,属性为 sAMAAccountName
    对象类
    此属性是 LDAP 用户可以具有的对象类的逗号分隔列表。 对象类和 username 属性配合用于查找用户以进行密码验证。
    注: 二进制属性,用户名属性和对象类用于主 LDAP ,但全部传递到 JavaScript 插件,并且必须由插件实现手动处理。
  9. 选择 下一步
  10. 将身份 提供者 属性从身份 提供者 映射到 Verify Cloud Directory 属性。
    创建身份代理后,可通过代理磁贴上的 “画笔”图标 编辑功能更改或更新映射关系。
  11. 选择 下一步
  12. 完成配置中,提供以下信息。
    • 代理程序的唯一可识别名称
    • 描述
    • 身份 提供者 的显示名称
    • 身份 提供者 的域
  13. 可选: 选择 “查看高级设置 ”以添加配置属性或选择用于加密的证书。
    注: 高级设置旨在供主 LDAP 使用,但传递到 JavaScript 插件并提供给这些插件以进行手动处理。
  14. 单击 保存并继续
  15. 后续步骤 中,执行以下步骤。
    1. 选择 查看 API 凭证 ,并使用 "复制到剪贴板" 图标来复制和存储客户机标识和客户机密钥。
      注意:只有拥有适当权限的用户才能查看客户秘密。 有关更多信息,请阅权限的安全更新。
    2. 如果尚未下载,请从 IBM Container Repository (ICR) 下载网桥代理。 参见在 Docker. 上安装和配置验证桥。
    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时,如果检索属性时发生错误,那么网桥将跳过此插件。 否则,将返回错误并且认证失败
    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