SAF角色映射器不允许访问。 (CICS中的自由度)

时间:2018-10-03 15:17:27

标签: security websphere roles cics

我有一个在CICS中的Liberty上运行的Web应用程序,我正在尝试将SAF角色映射与CICS身份验证一起使用。我将以下EJBROLE映射到CICS中的三个用户进行测试:该应用程序名为CPSM.APP

TECH.CPSM.APP.VIEWER

TECH.CPSM.APP.UPDATER

TECH.CPSM.APP.ADMIN

但是当这些用户登录到应用程序时,它将为所有3个用户返回403错误。不知道我在做什么错。我将在下面发布相关的server.xml和相关的web.xml组件。

Web.XML

<security-role>
    <description>Admin privileges</description>
    <role-name>ADMIN</role-name>
</security-role>

<security-role>
    <description>Viewer privileges</description>
    <role-name>VIEWER</role-name>
</security-role>

<security-role>
    <description>Updater privileges</description>
    <role-name>UPDATER</role-name>
</security-role>      

 <security-constraint>
    <display-name>com.ibm.cicsdev.jdbc.web.SecurityConstraint</display-name>
    <web-resource-collection>
        <web-resource-name>com.regions.cics.CPSM_Batch.jdbc</web-resource- 
  name>
        <url-pattern>/main.xhtml</url-pattern>
        <url-pattern>/viewgroups.xhtml</url-pattern>
        <url-pattern>/viewfileandtran.xhtml</url-pattern>
        <url-pattern>/viewgrouptable.xhtml</url-pattern>
    </web-resource-collection>

    <auth-constraint>
        <role-name>ADMIN</role-name>
        <role-name>VIEWER</role-name>
        <role-name>UPDATER</role-name>
    </auth-constraint>

    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>   

<security-constraint>
    <display-name>com.ibm.cicsdev.jdbc.web.SecurityConstraint</display-name>
    <web-resource-collection>
        <web-resource-name>com.regions.cics.CPSM_Batch.jdbc</web-resource- 
   name>
        <url-pattern>/editgroup.xhtml</url-pattern>
        <url-pattern>/addnewgroup.xhtml</url-pattern>
        <url-pattern>/entergroup.xhtml</url-pattern>
    </web-resource-collection>

    <auth-constraint>
        <role-name>ADMIN</role-name>
        <role-name>UPDATER</role-name>
    </auth-constraint>

    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>

<login-config>
<auth-method>BASIC</auth-method>
</login-config>    

Server.xml

    <featureManager>
     <feature>cicsts:core-1.0</feature>
    <feature>cicsts:defaultApp-1.0</feature>
    <feature>jsp-2.3</feature>

    <feature>javaMail-1.5</feature>

    <feature>jndi-1.0</feature>
    <feature>jsf-2.2</feature>
    <feature>jdbc-4.1</feature>
    <feature>jsp-2.3</feature>

    <feature>appSecurity-2.0</feature>

    <feature>cicsts:security-1.0</feature>
    <feature>ssl-1.0</feature>
</featureManager>

<!-- Use SAF registry -->
<safRegistry enableFailover="true" id="saf"/>
<safAuthorization id="saf"/>
<safCredentials profilePrefix="TECH" unauthenticatedUser="LIBGUEST"/>

<safRoleMapper profilePattern="%profilePrefix%.%resource%.%role%" 
toUpperCase="true"/>

当我尝试访问由应用程序定义的任何URL时,出现403错误。并在系统日志中显示此错误消息:

.ibm.ws.webcontainer.security.WebAppSecurityCollaboratorImpl A CWWKS9104A: 
Authorization failed for user LIBTST1 while invoking CPSM on 
/viewgroups.xhtml. The user is not granted access to any of the required 
roles: [ADMIN, VIEWER, UPDATER].

更新:我从我的installedapps.xml中添加了对此应用程序的引用,以防它可能有助于解决该问题。

 <application id="CPSM.APP" name="CPSM.APP" type="war" 
location="${server.output.dir}/installedApps/CPSM.APP.war" 
bundle="X11CPSM" token="1BEB96B000000199" bundlepart="CPSM_Batch" 
platform_id="" application_id="" appl_major_ver="-1" appl_minor_ver="-1" 
appl_micro_ver="-1">
    <application-bnd>
        <security-role name="cicsAllAuthenticated">
            <special-subject type="ALL_AUTHENTICATED_USERS"/>
        </security-role>
    </application-bnd>
</application>

3 个答案:

答案 0 :(得分:1)

您的safAuthorization元素已被注释掉-这就是启用safAuthorization的功能(即EJBRoles检查)。然后还要检查您的safRoleMapper值,以确保它们以正确的前缀映射到您创建的EJBroles。

答案 1 :(得分:0)

使用EJBROLE时,application-bnd被忽略/忽略。映射保存在SAF中,而不是绑定元素中。另请注意,在启动CICS区域之前,您必须“刷新”您的SAF更改。我认为必须具有对EJBROLE(或TOP SECRET中的等效文件)的“读取”访问权限。

我还想知道您是否对profilePattern的resource部分进行了正确匹配,您说该应用程序名为CPSM.APP。通常,Eclipse中的项目(如果这是您的dev-env)随后会反映到application中的installedApps.xml元素中,并且具有更限定的名称。 CICS提供的一个示例称为c om.ibm.cics.server.examples.wlp.hello.war,因此EJBROLE定义为TECH.com.ibm.cics.server.examples.wlp.hello.war.ADMIN

more information here,以防我略读而错过任何有用的东西。

答案 2 :(得分:0)

我已经解决了这个问题。我在下面提供了一个链接,该链接说明了遇到相同问题的任何人都需要更改的内容。对于那些使用CA作为CICS安全性的最高机密的人。必须设置设施控制选项RES,以允许将前缀资源(例如EJBROLES)的规则加载到给定用户的安全记录中。如果将此选项设置为NORES,则对给定EJBROLE的所有安全检查都将失败。

链接到解决方案:https://comm.support.ca.com/kb/permitted-resource-receiving-tss7250e-136/kb000005323