Security SAF角色映射程序不允许访问。(CICS中的自由)

Security SAF角色映射程序不允许访问。(CICS中的自由),security,websphere,roles,cics,Security,Websphere,Roles,Cics,我有一个web应用程序在CICS中的Liberty上运行,我正在尝试将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 &

我有一个web应用程序在CICS中的Liberty上运行,我正在尝试将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>    
更新:我正在添加从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>


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

使用EJBroles时,会绕过/忽略
应用程序bnd
。映射保存在SAF中,而不是绑定元素中。另外请注意,在启动CICS区域之前,必须“刷新”SAF更改。我认为必须拥有对EJBROLE的“读取”访问权限(或最高机密中的同等权限)

我还想知道您是否有配置文件模式匹配的
资源
部分,您说过该应用程序名为
CPSM.App
。通常,Eclipse中的项目(如果是您的开发环境)会反映到
installedApps.xml
中的
application
元素中,并具有更限定的名称。CICS提供的一个示例称为c
om.ibm.CICS.server.examples.wlp.hello.war
,因此EJBROLE定义为
TECH.com.ibm.CICS.server.examples.wlp.hello.war.ADMIN


如果我略读了一下,错过了有用的东西,那就有一个问题。

我已经解决了这个问题。我在下面添加了一个链接,解释了任何有相同问题的人需要更改的内容。对于使用CA top secret进行CICS安全的用户。必须设置设施控制选项RES,以允许将前缀资源(如EJBROLES)的规则加载到给定用户的安全记录中。如果此选项设置为NORES,则给定EJBROLE的所有安全检查都将失败


链接到解决方案:

应用程序名为CICS,我相信它将位于模式的资源部分。请参阅,谢谢。我觉得很傻。然而,我取消了它的注释,我仍然收到403错误。我将添加一些编辑来显示我修改了它。我还将把我的完整的应用程序名称,可能额外的时期是造成问题?是应用程序绑定必要吗?更新。重新启动浏览器后。我意识到我当前的设置不会在启动时初始化登录请求。这可能就是问题所在。我将尝试应用程序绑定,看看这是否解决了问题。要基于Ivan的回答,根据此消息,应用程序名称为“CPSM”:
CWWKS9104A:在/viewgroups.xhtml上调用CPSM时,用户LIBTST1的授权失败。用户无权访问任何必需的角色:[ADMIN、VIEWER、UPDATER]。
这表明Liberty正在寻找EJBRole:
TECH.CPSM.LIBTST1
。不确定这会有多大帮助,但您也可以使用safAuthorization元素添加额外日志:
。有关更多信息,请参阅:我的道歉。日志最初是这样打印的,因为我在让运行top secret的部门正确键入EJB角色时遇到了问题。该应用程序现在是CPSM.app作为项目,并在消息日志中打印。我现在正在检查已安装应用程序中的限定名称。也在“读取”属性方面。每个用户对应的角色都有access=ALL,我认为这是等效的。我不太确定额外的日志记录到哪里去了。它不会进入系统日志
.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].
 <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>