所以我正在尝试编写一个php SOAP客户端,要求用户为远程SOAP服务器传递他们的登录凭据。这是设置/困境:
现在用户想要一些与原始输出相关的其他数据。问题是,$ _POST变量现在已经过去了。用户必须包含凭据以及下一个请求。重复,直到用户决定通过另一种方法查找数据更容易,并放弃酷的SOAP客户端。
托管Web服务的服务器可以通过Web客户端直接访问,并通过cookie维护身份验证。但是,当通过WDSL查询服务器时,它不会查找任何cookie或其他浏览器端会话;它只是检查SOAP请求是否包含标题中的凭据。
所以这个问题有两个版本:
1)是否有办法将本地会话凭证传递给SOAP请求,从而将登录保持为一个? (请注意,即使在本地,我也无法控制身份验证方法。这由本地Apache模式处理,该模式控制整个系统中任何用户的身份验证,涵盖了我无权管辖的数十个部门。我查看了全局变量并没有看到任何凭据的提示,但我可能只是对PHP / Apache的一些基本安全功能感到愚蠢。
2)在二次登录后,PHP是否有一种安全可靠的方式来处理凭据,以便这些凭证可以使用一段时间(例如30分钟的会话?)。请记住,基于第一点,这些凭据是非常机密的,因此,没有简单的方法可以让某人蠢知并获取这些凭据以回显(或进入某些数据库以查看它们等)< / p>
对不起,如果这听起来很偏执。我不习惯处理安全凭证而不是简单的“这是你输入密码的地方......好了,现在每个人都知道对方剩下的会话,我可以回去输出有用的东西。”< / p>
即使是指向任何基本安全功能的链接也是一个有用的开始。
答案 0 :(得分:4)
创建您自己的到期会话。创建一个数据库表:
CREATE TABLE session (
ID int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
Hash binary(16) NOT NULL,
User int unsigned NOT NULL,
Created timestamp
);
当用户第一次进行身份验证时,创建会话并返回哈希的十六进制形式。
后续调用不需要用户名和密码,只需要哈希。比如说,在5分钟不活动之后,哈希被删除。用户名和密码只传递一次,此后哈希用作身份验证,并在一段时间不使用后过期。
答案 1 :(得分:0)
为什么不在第一个soap请求之后自己设置一个cookie,其中包含用户名/密码?你问一次,然后存储在一个cookie中。然后,您可以设置超时并在用户登录时进行查询。您可能希望在注销时删除cookie。
cookie仅包含soap用户/通行证。这样您就不必担心有人在服务器上查找并找到其他凭据。这实际上与用户每次输入它都是一样的,因为无论如何它都以明文发送。您可以使用可逆哈希或简单的双向加密对cookie中的用户名和密码进行模糊处理。