使用 SAF 角色映射进行授权

可以通过不同方式将 Java EE 角色映射到用户和组。 在分布式系统中,基本注册表或 LDAP 注册表通常与特定于应用程序的 <application-bnd> 元素结合使用,以将用户从这些注册表映射到 角色。 应用程序的部署描述符将确定哪些角色可以访问应用程序的哪些部分。

关于此任务

在 z/OS®上,存在另一种注册表类型,即系统授权工具 (SAF) 注册表。 除非配置为使用 LDAP ,否则 Liberty JVM 服务器在安装 cicsts:security-1.0 功能部件时将隐式使用此类型进行认证。 您可以选择使用 SAF 授权。 使用 SAF 授权时, 用户到角色 映射用于使用 SAF 角色映射器将角色映射到 EJBROLE 资源概要文件。 服务器会查询 SAF 以确定用户是否对 EJBROLE 资源概要文件具有所需读访问权。

在 Liberty JVM 服务器中,如果要在没有 SAF 授权的情况下使用 Java EE 角色,那么无法使用 CICS® 束来安装应用程序。 这是因为 CICS 束安装的应用程序会自动创建 <application-bnd> 元素并使用 ALL_AUTHENTICATED_USERS 特殊主体集,这将阻止您自行定义该元素。 而是必须直接在 server.xml 中创建 <application> 元素,并使用所需的角色和用户来配置 <application-bnd>

但是,如果选择使用 Java EE 角色和 SAF 授权,那么可以继续使用 CICS 束对 Web 应用程序进行生命周期。 Liberty 将忽略 <application-bnd> 以支持使用 SAF 注册表所确定的角色映射。 角色映射由属于 EJB 角色的用户确定。

提示: 在启用 SAF 授权时,无法使用 特殊主体集 ALL_AUTHENTICATED_USERSEVERYONE
提示: 建议在启动 CICS 区域之前创建或更新 EJB 角色。 Liberty 发出带有 GOBAL=NORACROUTE REQUEST = LIST 以支持最低版本的 z/OS。 地址空间直到重新启动 (或启动) 后才会看到更新。

过程

  1. <safAuthorization id="saf"/> 元素添加到 server.xml。 如果您正在使用 cicsts:distributedIdentity-1.0 功能部件,那么将为您定义此功能部件。
  2. 创建所需的 EJB 角色,并参考所描述的前缀方案。
  3. 将用户添加到这些 EJB 角色。

    缺省情况下,如果使用 SAF 授权,那么应用程序将使用模式 <profile_prefix>.<resource>.<role> 来确定用户是否具有角色。 profile_prefix 缺省为 BBGZDFLT ,但可以使用 <safCredential> 元素进行修改。 有关更多信息,请参阅 Liberty: 使用 WZSSAD 访问 z/OS 安全性资源

    可以使用缺省为 server.xml 中的 <safRoleMapper> 元素来修改角色映射首选项
    <safRoleMapper profilePattern="myprofile.%resource%.%role%" toUpperCase="true"/>
    然后,可以使用以下 RACF® 命令授权用户使用特定 EJB 角色,其中 WEBUSER 是已认证的用户标识。
    RDEFINE EJBROLE BBGZDFLT.MYAPP.ROLE UACC(NONE) 
    PERMIT BBGZDFLT.MYAPP.ROLE CLASS(EJBROLE) ACCESS(READ) ID(WEBUSER) 
  4. 可选: 如果要部署 CICS servlet 示例,并且要使用具有 SAF 授权的 Java EE 角色安全性,请为已部署的每个 servlet 创建 SAF EJBROLE 。 例如,如果使用 BBGZDFLT的缺省 APPL 类,请定义以下 EJBROLE 安全性定义:
    RDEFINE EJBROLE BBGZDFLT.com.ibm.cics.server.examples.wlp.hello.war.cicsAllAuthenticated UACC(NONE)
    RDEFINE EJBROLE BBGZDFLT.com.ibm.cics.server.examples.wlp.tsq.app.cicsAllAuthenticated UACC(NONE)
    RDEFINE EJBROLE BBGZDFLT.com.ibm.cics.server.examples.wlp.jdbc.app.cicsAllAuthenticated UACC(NONE)
    SETROPTS RACLIST(EJBROLE) REFRESH

    授予对每个需要授权的 Web 用户标识的已定义角色的读访问权:

    PERMIT BBGZDFLT.com.ibm.cics.server.examples.wlp.hello.war.cicsAllAuthenticated 
           CLASS(EJBROLE) ID(user) ACCESS(READ)
    PERMIT BBGZDFLT.com.ibm.cics.server.examples.wlp.tsq.app.cicsAllAuthenticated 
           CLASS(EJBROLE) ID(user) ACCESS(READ)
    PERMIT BBGZDFLT.com.ibm.cics.server.examples.wlp.jdbc.app.cicsAllAuthenticated 
           CLASS(EJBROLE) ID(user) ACCESS(READ)
    SETROPTS RACLIST(EJBROLE) REFRESH

结果

您可以使用 CICS 安全性和/或 Java EE 角色安全性来授权访问 Web 应用程序,方法是定义角色和角色中的用户。