我正在尝试找出CakePHP cookie并满足我稍微不寻常的身份验证要求。
我有一个基于cakephp的数据收集系统,它现在正在与一个使用COTS软件构建的报告系统集成。报告系统需要访问控制,除非我想在两个系统中复制所有用户帐户,否则我需要报告系统能够找出用户是否在我的CakePHP系统中进行了身份验证。
报表系统允许我加载一个Java类并在客户端的报表请求第一次到达时执行一个函数。所以我的想法是
- 检查传入的报告请求并提取我的CakePHP站点用于身份验证/会话标识的cookie
- 从Java函数发送请求到CakePHP站点内的'reportauth'操作,并附带此cookie
- CakePHP中的reportauth操作然后检查用户是否登录到CakePHP站点,并向标识用户角色的Java函数返回加密响应
我可以获取cookie,在请求中发送它,另外我可以在PHP和Java之间共享加密信息。
然而,当我在Java请求中使用"新鲜"cookie(我的浏览器在新登录后反复向CakePHP站点发送请求的cookie)时,响应说用户未登录。如果我在浏览器中重新加载网站,我就已经注销了。我怀疑cookie中可能有一些关于user-agent(?)的额外信息,这些信息导致java源请求被抛出,并且出于安全考虑销毁会话,但我对系统了解不够。我想我可能会看到CakePHP防止会话劫持(这通常会让我很高兴)。
谁能告诉我是否有办法解决这个问题?最好是一个不涉及CakePHP中自定义验证组件的,因为数据收集站点已经上线,我的报告截止日期也不远了。非常感谢。
变通办法:
让CakePHP在一个单独的cookie中存储一个随机令牌,并作为用户表中的一个字段。
然后让Java应用程序获取令牌,并将其发送给cakephp应用程序以获取用户的详细信息。
或者,让它与CakePHP应用程序本身进行身份验证,并传入会话id以使cake使用正确的会话。注意,该函数的设置需要在session_start()被调用之前完成。