Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 了解WSO2中服务端的当前客户端_Php_Web Services_Wso2_Wsh - Fatal编程技术网

Php 了解WSO2中服务端的当前客户端

Php 了解WSO2中服务端的当前客户端,php,web-services,wso2,wsh,Php,Web Services,Wso2,Wsh,在使用wso2/php编写web服务时,我在一个地方被绊住了。 我想使用安全的mtom。 在使用加密或签名时,我如何知道在安全令牌中使用哪个客户端的公共证书??? 或者我应该尝试匹配所有现有的客户端公共证书吗 我需要知道,当前用户是谁。因为服务是针对客户的。 请帮忙……有急事:) 问候 Charanjeet Kaur我知道有点晚了,但我遇到了你同样的问题。不知何故,这是一个令人困惑的话题(可能是因为缺乏精确的文档)。 当通过代码(而不是使用策略文件)配置服务时,您的能力非常有限。以下是我的发现:

在使用wso2/php编写web服务时,我在一个地方被绊住了。 我想使用安全的mtom。 在使用加密或签名时,我如何知道在安全令牌中使用哪个客户端的公共证书??? 或者我应该尝试匹配所有现有的客户端公共证书吗

我需要知道,当前用户是谁。因为服务是针对客户的。 请帮忙……有急事:)

问候
Charanjeet Kaur

我知道有点晚了,但我遇到了你同样的问题。不知何故,这是一个令人困惑的话题(可能是因为缺乏精确的文档)。 当通过代码(而不是使用策略文件)配置服务时,您的能力非常有限。以下是我的发现:

当客户机仅对消息签名时,他会将其证书作为安全令牌(wsse:binarysecuritytoken)附加到头中。服务器获取该证书并使用它检查签名。因此,您需要指定:

在客户端中:客户端证书和私钥

在服务中:服务证书和私钥(从标头获取客户端证书)

当客户端对消息进行签名和加密时,客户端将使用服务器证书进行加密,并同时发送其证书,以便服务器可以检查签名并重新加密。在这里,服务使用来自报头的证书来加密响应。因此,您只需指定:

在客户端中:客户端证书和私钥,以及服务器证书

在服务器中:服务器证书和私钥(从标头获取客户端证书)

当客户端只对消息进行加密时,他不会在请求中发送他的证书,因此您必须在服务中指定客户端证书

在客户端中:客户端证书和私钥,以及服务器证书

在服务器中:服务器证书、私钥和客户端证书

因此,在第一种情况下,您不需要指定客户端的证书,如果需要对用户进行身份验证,您可以从请求头获取证书并进行进一步处理(可能是根据一些预共享证书进行检查)。在最后一个例子中,我找不到解决方法(可能是使用xml策略)

要在php中检索证书,您需要处理名称空间(硬连线)代码,代码如下(在回复函数中):

警告!!outputHeaders[3]不是获取安全标头的安全方法!!这只是为了展示一种获取客户机证书的简单方法

$xml = simplexml_load_string($inMessage->outputHeaders[3]->str,  NULL, NULL, "http://schemas.xmlsoap.org/soap/envelope/");
$ss= $xml->children("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd")
    ->BinarySecurityToken;