加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

通过SoapHeader实现身份认证

发布时间:2020-12-17 02:00:02 所属栏目:安全 来源:网络整理
导读:之前一直抱怨 php 的 soap 很傻,在 client 端有设置 header 的方法,在 server 端却没有取 header 的方法。那是很傻很天真,直接用正则表达式从 soap 信封的 header 中提取 header 信息。 最近由于有项目要发布 webservice ,重新燃起对 soap 的兴趣,看了

之前一直抱怨phpsoap很傻,在client端有设置header的方法,在server端却没有取header的方法。那是很傻很天真,直接用正则表达式从soap信封的header中提取header信息。
最近由于有项目要发布webservice,重新燃起对soap的兴趣,看了w3的英文文档,那是个云里雾里。收集了一些资料,做了一个关于saop header进行身份认证的实验。

在这个实验中,假定soap client用一个字符串作为身份认证的标识,soap server取到这个字符串后,对其进行辨认,如果与期望相符合,认证通过,如果不符,抛出soapFault

理论就不多说了,我也不懂,直接上代码
client.php
<?php
$cli = new SoapClient(null,array('uri' => 'http://127.0.0.1/namespace/','location' => 'http://localhost/server.php','trace' => true));
$h = new SoapHeader('http://127.0.0.1/namespace/','auth','123456789',false,SOAP_ACTOR_NEXT);
$cli->__setSoapHeaders(array($h));
try {
??? echo $cli->say();
} catch (Exception $e) {
??? echo $e->getMessage();
}

server.php
<?php
class Server{
????
??? public function auth($a)
??? {
??? ??? if($a != '123456789'){
??? ??? ??? throw new SoapFault('Server','您无权访问');
??? ??? }
??? }
????
??? function say()
??? {
??? ??? return 'Hi';
??? }
}

$srv = new SoapServer(null,array('uri' => 'http://localhost/namespace'));
$srv->setClass('Server');
$srv->handle();

以上代码就实现了认证的功能,最关键的地方就是SoapHeader的构造。soapHeader有五个构造参数,

namespace

无用

name

鉴别身份标识的函数或者方法名

data

存放标识身份的字符串

mustUnderstand

是否必须处理该header

actor

处理该header的角色(不是太理解)

注意看红色的一行,构造了一个soapHeaderheader的名称为“auth”data“123456789”mustUnderstandfalseactorSOAP_ACTOR_NEXT
注意观察server.php中的server类有一个方法“auth”,刚好与header的名称对应,方法auth的参数$u,就是soapHeaderdatasoapServer接收到这个请求会,先调用auth方法,并把“123456789”作为参数传递给该方法。
mustUnderstand参数为false时,即便没有auth这个方法,say方法也会被调用,但是如果它为true的话,如果auth方法不存在,就会返回一个Soapfault告知该header没有被处理。

actor参数指名那些role必须处理该header,这儿我理解得不是太透彻,不好说。

大概就这样,关键点在于SoapHeader的构造。

soap官方:http://www.w3.org/TR/soap12-part1/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读