为远程 JCICSX API 开发配置安全性

JCICSX 服务器是 CICS 区域中的远程 Liberty JVM 服务器。 通过 JCICSX API ,它允许开发者在其本地工作站上运行 Java 应用程序,就像在 CICS中运行一样,而无需将应用程序部署到 CICS。 当从开发者的本地 JVM 中的 JCICSX 开发客户机建立到 JCICSX 服务器的远程连接时,远程服务器可以认证用户,并根据他们的身份授权他们进行访问,以确保安全性。 它还可防止用户干扰其他用户启动的远程任务。

目录

提供了哪些认证和授权选项?

JCICSX 服务器 认证 用户以验证其身份。 规划如何认证 JCICSX 用户时,需要考虑一些选项。 首先,您需要决定使用哪个用户注册表来存储用户身份信息。 本主题涵盖两个注册表选项的配置: 使用 SAF 中的用户身份 (safRegistry) 和将用户身份直接嵌入到 server.xml (basicRegistry) 中。

在配置服务器查找用户身份的位置后,可以 授权 这些用户使用 JCICSX 服务器应用程序。 缺省情况下, JCICSX 服务器允许所有能够向服务器认证的用户访问其服务。 但是,这是可定制的。 JCICSX 服务器定义 Enterprise Java™ 角色 JCICSXUSER ,可用于定制访问权。 这是通过将角色 (提供对应用程序的访问权) 映射到一组用户来实现的。 此外,此角色映射可以记录在 SAF (safAuthorization) 中,也可以直接嵌入在 server.xml中。
注: 您必须具有 SAF 注册表才能使用 SAF 授权。
因此,如 图 1中所示,以下认证和授权选项可用于远程 JCICSX 服务器:
  • 将基本用户注册表用于认证,将 server.xml 用于角色映射。
  • 将 SAF 注册表用于认证,将 server.xml 用于角色映射。
  • 将 SAF 注册表用于认证,并将 SAF 授权用于角色映射。
图 1。 远程 JCICSX 服务器的认证和授权
此图显示可用于远程 JCICSX 服务器的认证和授权方法。

要选择哪些选项?

从物流角度来看,直接在 server.xml中配置认证和授权很简单。 因此,如果要在专用开发区域中设置 JCICSX 服务器,那么可以使用此选项。 但是,由于 server.xml 配置难以共享,因此在更大范围内存在局限性。 虽然设置 SAF 以进行认证和授权更为复杂,这涉及在 RACF中创建 EJB 角色 (EJBROLEs) ,但如果您已有 SAF 数据库中的现有信息,那么可以利用这些信息。 例如,您可以授权 SAF 中定义的现有组使用 JCICSX,而不必再次指定这些组。 您还可以在不同 CICS 区域中运行的 JCICSX 服务器的多个实例之间共享该信息,而不必单独配置每个区域。

注: 您在 JCICSX 服务器的 server.xml 中指定的任何安全配置都必须与您已部署到该服务器的其他应用程序的安全需求共存。 例如,如果您有需要启用 SAF 授权的应用程序,那么不能专门针对 JCICSX 服务器将其禁用,并在同一 Liberty 服务器中启用 SAF 授权。 在这种情况下,您可以创建另一个专用于在 CICS 区域中运行 JCICSX 服务器的 JVM 服务器来处理此问题。 如果没有为 JCICSX创建单独的服务器,那么必须遵循 方案 3 中的指示信息: 在我的所有 CICS 区域中设置安全性,授予特定人员访问权 以设置服务器的 SAF 授权。

此外,当客户机启动与 JCICSX 服务器的会话时,将创建新的 CICS 任务以在事务 CJXA 和 URI 映射 DFHJXSU 下运行。 该会话的后续 JCICSX 请求将在同一任务下运行,并且必须由同一用户发出。 事务 CJXA 是类别 2 事务。 如果开启了事务连接安全性,那么还需要允许用户运行事务 CJXA。

请参阅 典型方案和过程 ,以了解有关如何为许多典型方案配置认证和授权的讨论。

典型场景和过程

方案 1: 允许所有用户在没有认证的单个区域中试用该方案

要允许开发者在开发区域中快速测试应用程序,可以将远程 JCICSX 服务器配置为不使用认证。 此任务在 server.xml中配置所有安全设置。

开始之前

通过将 JCICSX 服务器功能部件 (cicsts:jcicsxServer-1.0) 添加到 Liberty JVM 服务器的 server.xml 文件,确保您已设置 Liberty JVM 服务器以充当 JCICSX 服务器:

<featureManager>
    <feature>cicsts:jcicsxServer-1.0</feature>
</featureManager>

有关更多信息,请参阅 使用 JCICSX 进行 Java 开发

过程
  1. 如果未使用 appSecurity-2.0 功能部件配置服务器以使用 Liberty 安全性,那么无需进一步配置。 任何用户都可以在未提供凭证的情况下访问服务器。 有关 appSecurity的更多信息,请参阅 为 Liberty JVM 服务器配置安全性
  2. 如果使用 appSecurity-2.0 功能部件配置服务器以使用 Liberty 安全性:
    1. 缺省情况下,服务器仅接受具有有效证书的认证。 要允许使用用户名和密码对用户进行认证,请将以下行添加到 server.xml 文件中:
      <webAppSecurity allowFailOverToBasicAuth="true"/>

      否则,用户在使用用户名和密码访问服务器时将发生 403 错误。

    2. 创建基本用户注册表以在 server.xml中认证用户。 有关指示信息,请参阅 为 Liberty 配置基本用户注册表
    3. 缺省情况下,服务器允许用户注册表中定义的所有已认证用户访问 servlet。 通过将以下片段添加到 server.xml,覆盖缺省设置以允许所有用户:
      <authorization-roles id="com.ibm.cics.wlp.jcicsxserver">
        <security-role name="JCICSXUSER">
          <special-subject type="EVERYONE"/>
        </security-role>
      </authorization-roles>

      它将 special-subject 类型从 ALL_AUTHENTICATED_USERS 更改为 EVERYONE ,以便任何用户都可以访问 servlet ,而无论他们提供的用户名或密码是什么。 如果未指定 EVERYONE 特殊主题,那么访问服务器的未经认证的用户将收到 401 错误。

  3. 如果您正在使用事务连接安全性,请授予 CICS 缺省用户标识访问权以运行 CJXA 事务。
结果

现在,您已将远程 JCICSX 服务器配置为不对 CICS 区域使用认证。

方案 2: 允许用户使用 SAF 身份登录,向已认证的用户或特定用户授予访问权

如果您已有 SAF 注册表来管理用户身份,那么这很方便。 在此场景中,您使用 SAF 注册表进行认证,并在 server.xml 中配置角色映射,以便无需配置新的 SAF EJBROLE。

开始之前

通过将 JCICSX 服务器功能部件 (cicsts:jcicsxServer-1.0) 添加到 Liberty JVM 服务器的 server.xml 文件,确保您已设置 Liberty JVM 服务器以充当 JCICSX 服务器:

<featureManager>
    <feature>cicsts:jcicsxServer-1.0</feature>
</featureManager>

有关更多信息,请参阅 使用 JCICSX 进行 Java 开发

过程
  1. JCICSX 服务器启用集成 Liberty 安全性的 CICS 安全性,并将其配置为使用 SAF 注册表。 有关指示信息,请参阅 为 Liberty JVM 服务器配置安全性
  2. 缺省情况下,服务器仅接受具有有效证书的认证。 要允许使用用户名和密码对用户进行认证,请将以下行添加到 server.xml 文件中:
    <webAppSecurity allowFailOverToBasicAuth="true"/>

    否则,用户在使用用户名和密码访问服务器时将发生 403 错误。

  3. 认证用户后,缺省情况下允许所有已认证的用户使用应用程序。 如果要将应用程序限制为特定用户,请将用户绑定到 server.xml中的 JCICSXUSER 安全角色:
    <authorization-roles id="com.ibm.cics.wlp.jcicsxserver">
      <security-role name="JCICSXUSER">
        <user name="USER"/>
      </security-role>
    </authorization-roles>
  4. 如果您正在使用事务连接安全性,请授予 CICS 缺省用户标识访问权以运行 CJXA 事务。
结果

现在,您已配置远程 JCICSX 服务器,以使用 SAF 注册表对用户进行认证,并使用 Enterprise Java中的角色映射向用户授予对服务的访问权。

方案 3: 在我的所有 CICS 区域中设置安全性,向特定人员授予访问权

在此场景中,您将在缺省概要文件前缀下运行的所有 CICS 区域中的 JCICSX 服务器配置为使用 SAF 进行认证和授权,以授予特定用户或用户组访问权。 这是因为 SAF 授权使您能够轻松地在多个 CICS 区域之间共享安全设置。 使用 SAF 授权时, 用户到角色 映射用于使用 SAF 角色映射器将角色映射到 EJBROLE 资源概要文件。 服务器会查询 SAF 以确定用户是否对 EJBROLE 资源概要文件具有所需读访问权。 这也很方便,您可以通过创建 EJBROLE 来授权现有用户组使用 JCICSX 服务器。

开始之前

通过将 JCICSX 服务器功能部件 (cicsts:jcicsxServer-1.0) 添加到 Liberty JVM 服务器的 server.xml 文件,确保您已设置 Liberty JVM 服务器以充当 JCICSX 服务器:

<featureManager>
    <feature>cicsts:jcicsxServer-1.0</feature>
</featureManager>

有关更多信息,请参阅 使用 JCICSX 进行 Java 开发

过程
  1. JCICSX 服务器启用集成 Liberty 安全性的 CICS 安全性,并将其配置为使用 SAF 注册表。 有关指示信息,请参阅 为 Liberty JVM 服务器配置安全性
  2. 缺省情况下,服务器仅接受具有有效证书的认证。 要允许使用用户名和密码对用户进行认证,请将以下行添加到 server.xml 文件中:
    <webAppSecurity allowFailOverToBasicAuth="true"/>

    否则,用户在使用用户名和密码访问服务器时将发生 403 错误。

  3. <safAuthorization> 元素添加到 server.xml,以将 SAF 授权用于角色映射:
    <safAuthorization id="saf"/>
  4. 使用以下 RACF 命令在 RACF® 中创建 EJBROLE:
    RDEFINE EJBROLE BBGZDFLT.com.ibm.cics.wlp.jcicsxserver.JCICSXUSER UACC(NONE)

    其中 BBGZDFLT 是缺省概要文件前缀,因此此安全性配置适用于在缺省概要文件前缀下运行的所有 CICS 区域。 可以修改概要文件前缀,使具有相同概要文件前缀的区域能够轻松共享安全设置。 有关更多信息,请参阅 使用 SAF 角色映射进行授权

  5. 授予用户对这些 EJBROLE 的读访问权:
    PERMIT BBGZDFLT.com.ibm.cics.wlp.jcicsxserver.JCICSXUSER CLASS(EJBROLE) ACCESS(READ) ID(<user|group>)
  6. 如果您正在使用事务连接安全性,请授予 CICS 缺省用户标识访问权以运行 CJXA 事务。
结果

您已配置在缺省概要文件前缀下运行的所有 CICS 区域中的远程 JCICSX 服务器,以使用 SAF 注册表来认证用户,并授权特定用户或用户组访问服务。