SESN0008E:经过身份验证的匿名用户尝试访问用户拥有的会话

时间:2015-01-09 20:30:42

标签: ibm-mobilefirst mobilefirst-server

环境:

  • MFP 6.3 Studio Windows 7
  • MFP 6.3服务器(WAS LC)

从IBM MobileFirst Platform Developer Center下载form-based sample

在MFP 6.3 Studio中,样本运行正常。

然后我更改了我的构建设置和构建所有环境 - >获取新的wlapp文件。

我从MFP 6.3服务器获取war文件。打开并输入修改后的authenticationConfig.xml 基本上它只是将一个片段从studio authenticationConfig.xml传输到WAR文件中的xml文件。

<customSecurityTest name="DummyAdapter-securityTest">
    <test isInternalUserID="true" realm="SampleAppRealm"/>
</customSecurityTest>       

我重新启动服务器并部署.wlapp和.adapter文件。

在独立服务器中,我运行预览模式。我输入用户名和密码并登录。它没有登录,我在服务器console.log上看到了这些错误。

[ERROR   ] SESN0008E: A user authenticated as anonymous has attempted to access a session owned by user:BasicRegistry/demo.
[ERROR   ] SRVE0232E: Internal Server Error. Exception Message: [com.ibm.ws.webcontainer.webapp.WebAppErrorReport: com.ibm.websphere.servlet.session.UnauthorizedSessionRequestException: SESN0008E: A user authenticated as anonymous has attempted to access a session owned by user:BasicRegistry/demo.
    at com.ibm.ws.webcontainer.session.impl.HttpSessionContextImpl.checkSecurity(HttpSessionContextImpl.java:686)
    at [internal classes]
    at com.worklight.core.auth.impl.AuthenticationFilter.associateAuthContextWithThread(AuthenticationFilter.java:426)
    at com.worklight.core.auth.impl.AuthenticationFilter.doFilter(AuthenticationFilter.java:145)
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:194)
    at [internal classes]
Caused by: com.ibm.websphere.servlet.session.UnauthorizedSessionRequestException: SESN0008E: A user authenticated as anonymous has attempted to access a session owned by user:BasicRegistry/demo.
    ... 7 more
]
[ERROR   ] SRVE0777E: Exception thrown by application class 'com.worklight.core.auth.impl.AuthenticationContext.checkAuthentication:604'
com.worklight.server.auth.api.WorkLightAuthenticationException
    at com.worklight.core.auth.impl.AuthenticationContext.checkAuthentication(AuthenticationContext.java:604)
    at com.worklight.core.auth.impl.AuthenticationContext.processRealms(AuthenticationContext.java:469)
    at com.worklight.core.auth.impl.AuthenticationContext.pushCurrentResource(AuthenticationContext.java:443)
    at com.worklight.core.auth.impl.AuthenticationServiceBean.accessResource(AuthenticationServiceBean.java:75)
    at com.worklight.integration.services.impl.DataAccessServiceImpl.invokeProcedureInternal(DataAccessServiceImpl.java:430)
    at com.worklight.integration.services.impl.DataAccessServiceImpl.invokeProcedure(DataAccessServiceImpl.java:139)
    at com.worklight.gadgets.serving.handler.BackendQueryHandler.getContent(BackendQueryHandler.java:95)
    at com.worklight.gadgets.serving.handler.BackendQueryHandler.doPost(BackendQueryHandler.java:56)
    at com.worklight.gadgets.serving.GadgetAPIServlet.doGetOrPost(GadgetAPIServlet.java:148)
    at com.worklight.gadgets.serving.GadgetAPIServlet.doPost(GadgetAPIServlet.java:108)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:595)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1240)
    at [internal classes]
    at com.worklight.core.auth.impl.AuthenticationFilter$1.execute(AuthenticationFilter.java:217)
    at com.worklight.core.auth.impl.AuthenticationServiceBean.accessResource(AuthenticationServiceBean.java:76)
    at com.worklight.core.auth.impl.AuthenticationFilter.doFilter(AuthenticationFilter.java:222)
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:194)
    at [internal classes]

2 个答案:

答案 0 :(得分:3)

在研究了securityIntegrationEnabled =&#34;错误的解决方法之后,我想我已经弄清楚了为什么工作正常/无效。

解决方案实际上非常简单,无需更改server.xml。

当出现错误SESN0008E时,我通过单击独立服务器中管理控制台的链接,使用通用预览模式测试FormAuth应用程序。尽管常见预览链接已打开到新浏览器,但sessionID实际上仍然存在。两个浏览器选项卡都在同一个会话中(我已选中)。

这意味着我使用的sessionID实际上是管理控制台已经过身份验证的会话ID。在我的预览模式中,我尝试在已经拥有&#34;拥有的会话中再次进行身份验证。由另一个用户。这会导致WAS抛出错误SESN0008E:以匿名身份验证的用户尝试访问用户拥有的会话:BasicRegistry / demo。我的应用预览与管理控制台位于同一个httpsession中,因此出现错误。

为了让它工作,我复制了预览链接。关闭所有浏览器以确保会话被终止。打开一个新浏览器,粘贴预览链接,FormAuthentication现在可以使用。

可能更方便的解决方案是创建移动Web环境并将其用于预览测试。

答案 1 :(得分:0)

在WAS和WAS Liberty配置文件中,默认情况下启用安全集成。这也意味着:

  

...会话管理工具将用户的身份与   他们的HTTP会话。此功能会将会话标记为“拥有”   访问尚未标记为的会话的第一个用户   拥有。

     

如果会话已标记为已拥有,则会检查该会话   所有者与当前用户相同。如果没有,而不是   授予对会话的访问权限,至少具有标识符的消息   将记录SESN0008E并且不会访问会话   理所当然的。

     

在某些情况下,会出现UnauthorizedSessionRequestException   抛出,消息SESN0008E为原因。

在Eclipse的MobileFirst Development Server中,底层WAS Liberty的server.xml已禁用此功能。

对于POC作为解决方法,您可以通过在server.xml文件中添加以下条目来禁用该功能:<httpSession securityIntegrationEnabled="false"/>

请注意,添加此设置对所有应用程序都是全局的,如果存在,可能会对服务器上的现有应用程序产生负面影响。