Menyambung kepada Perkhidmatan Web Dilindungi WS-Security dalam PHP
PHP menyediakan kelas terbina dalam untuk berinteraksi dengan Perkhidmatan Web. Walau bagaimanapun, kelas ini mungkin memerlukan pengubahsuaian untuk perkhidmatan yang dijamin dengan WS-Security. Khususnya, pengesahan mungkin tidak berfungsi seperti yang diharapkan kerana bukti kelayakan yang hilang.
Untuk menangani isu ini, pertimbangkan untuk melanjutkan kelas SoapHeader untuk mencipta pengepala pengesahan patuh WS-Security. Coretan kod berikut menunjukkan pendekatan ini:
class WsseAuthHeader extends SoapHeader { private $wss_ns = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd'; function __construct($user, $pass, $ns = null) { if ($ns) { $this->wss_ns = $ns; } $auth = new stdClass(); $auth->Username = new SoapVar($user, XSD_STRING, NULL, $this->wss_ns, NULL, $this->wss_ns); $auth->Password = new SoapVar($pass, XSD_STRING, NULL, $this->wss_ns, NULL, $this->wss_ns); $username_token = new stdClass(); $username_token->UsernameToken = new SoapVar($auth, SOAP_ENC_OBJECT, NULL, $this->wss_ns, 'UsernameToken', $this->wss_ns); $security_sv = new SoapVar( new SoapVar($username_token, SOAP_ENC_OBJECT, NULL, $this->wss_ns, 'UsernameToken', $this->wss_ns), SOAP_ENC_OBJECT, NULL, $this->wss_ns, 'Security', $this->wss_ns); parent::__construct($this->wss_ns, 'Security', $security_sv, true); } }
Dengan mencipta pengepala patuh WS-Security, anda boleh mengesahkan perkhidmatan web sebelum membuat permintaan. Untuk menggunakan pengepala, masukkan kod berikut:
$wsse_header = new WsseAuthHeader($username, $password); $x = new SoapClient('{...}', array("trace" => 1, "exception" => 0)); $x->__setSoapHeaders(array($wsse_header));
Ingat untuk menggantikan $nama pengguna dan $kata laluan dengan nilai yang sesuai.
Sebagai alternatif, jika anda memerlukan pengepala dengan nonce dan cap waktu, pertimbangkan versi dikemas kini berikut:
class WsseAuthHeader extends SoapHeader { private $wss_ns = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd'; private $wsu_ns = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd'; function __construct($user, $pass) { $created = gmdate('Y-m-d\TH:i:s\Z'); $nonce = mt_rand(); $passdigest = base64_encode(pack('H*', sha1(pack('H*', $nonce) . pack('a*', $created) . pack('a*', $pass)))); $auth = new stdClass(); $auth->Username = new SoapVar($user, XSD_STRING, NULL, $this->wss_ns, NULL, $this->wss_ns); $auth->Password = new SoapVar($pass, XSD_STRING, NULL, $this->wss_ns, NULL, $this->wss_ns); $auth->Nonce = new SoapVar($passdigest, XSD_STRING, NULL, $this->wss_ns, NULL, $this->wss_ns); $auth->Created = new SoapVar($created, XSD_STRING, NULL, $this->wss_ns, NULL, $this->wsu_ns); $username_token = new stdClass(); $username_token->UsernameToken = new SoapVar($auth, SOAP_ENC_OBJECT, NULL, $this->wss_ns, 'UsernameToken', $this->wss_ns); $security_sv = new SoapVar( new SoapVar($username_token, SOAP_ENC_OBJECT, NULL, $this->wss_ns, 'UsernameToken', $this->wss_ns), SOAP_ENC_OBJECT, NULL, $this->wss_ns, 'Security', $this->wss_ns); parent::__construct($this->wss_ns, 'Security', $security_sv, true); } }
Dengan melaksanakan penyelesaian ini, anda boleh menyambung dengan berkesan ke Perkhidmatan Web yang dilindungi WS-Security dalam PHP dan mengesahkan dengan betul.
Atas ialah kandungan terperinci Bagaimana untuk mengesahkan kepada Perkhidmatan Web yang dilindungi WS-Security dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!