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

通过SoapHeader实现身份认证

发布时间:2020-12-17 01:20:15 所属栏目:安全 来源:网络整理
导读:说明:本文系转载 ,稍作改动 之前一直抱怨 php 的 soap 很傻,在 client 端有设置 header 的方法,在 server 端却没有取 header 的方法。那是很傻很天真,直接用正则表达式从 soap 信封的 header 中提取 header 信息。 最近由于有项目要发布 webservice ,

说明:本文系转载 ,稍作改动

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

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

理论就不多说了,我也不懂,直接上代码
client.php
???

server.php

?


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

namespace

无用

name

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

data

存放标识身份的字符串

mustUnderstand

是否必须处理该header

actor

处理该header的角色(可以参照我上一篇文章)

注意看 红色 的一行,构造了一个 soapHeader header 的名称为 “auth” data “123456789” mustUnderstand false actor SOAP_ACTOR_NEXT
注意观察 server.php 中的 server 类有一个方法 “auth” ,刚好与 header 的名称对应,方法 auth 的参数 $u ,就是 soapHeader data soapServer 接收到这个请求会,先调用 auth 方法,并把 “123456789” 作为参数传递给该方法。
mustUnderstand
参数为 false 时,即便没有 auth 这个方法, say 方法也会被调用,但是如果它为 true 的话,如果 auth 方法不存在,就会返回一个 Soapfault 告知该 header 没有被处理。
actor
参数指名那些 role 必须处理该 header ,这儿我理解得不是太透彻,不好说。
大概就这样,关键点在于 SoapHeader 的构造。

(编辑:李大同)

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

    推荐文章
      热点阅读