PHP code example of php-soap / psr18-wsse-middleware
1. Go to this page and download the library: Download php-soap/psr18-wsse-middleware library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
php-soap / psr18-wsse-middleware example snippets
use Http\Client\Common\PluginClient;
use Soap\Psr18Transport\Psr18Transport;
use Soap\Psr18WsseMiddleware\WsaMiddleware;
use Soap\Psr18WsseMiddleware\WsaMiddleware2005;
$transport = Psr18Transport::createForClient(
new PluginClient($yourPsr18Client, [
new WsaMiddleware(),
// OR
new WsaMiddleware2005(),
])
);
use Http\Client\Common\PluginClient;
use Soap\Psr18Transport\Psr18Transport;
use Soap\Psr18WsseMiddleware\WsseMiddleware;
$transport = Psr18Transport::createForClient(
new PluginClient($yourPsr18Client, [
new WsseMiddleware([$entries])
])
);
use Soap\Psr18WsseMiddleware\WsseMiddleware;
use Soap\Psr18WsseMiddleware\WSSecurity\Entry;
$wsseMiddleware = new WsseMiddleware(
outgoing: [
(new Entry\Username($user))
->withPassword('xxx')
->withDigest(false),
]
);
use Soap\Psr18WsseMiddleware\WSSecurity\KeyStore\Certificate;
use Soap\Psr18WsseMiddleware\WSSecurity\KeyStore\ClientCertificate;
use Soap\Psr18WsseMiddleware\WSSecurity\KeyStore\Key;
$privKey = Key::fromFile('security_token.priv')->withPassphrase('xxx'); // Regular private key (not wrapped in X509)
$pubKey = Certificate::fromFile('security_token.pub'); // Public X509 cert
// or:
$bundle = ClientCertificate::fromFile('client-certificate.pem')->withPassphrase('xxx');
$privKey = $bunlde->privateKey();
$pubKey = $bunlde->publicCertificate();
use Soap\Psr18WsseMiddleware\WSSecurity\KeyStore\Certificate;
use Soap\Psr18WsseMiddleware\WSSecurity\KeyStore\Key;
use Soap\Psr18WsseMiddleware\WSSecurity\SignatureMethod;
use Soap\Psr18WsseMiddleware\WSSecurity\DigestMethod;
use Soap\Psr18WsseMiddleware\WSSecurity\KeyIdentifier;
use Soap\Psr18WsseMiddleware\WsseMiddleware;
use Soap\Psr18WsseMiddleware\WSSecurity\Entry;
$privKey = Key::fromFile('security_token.priv')->withPassphrase('xxx');
$pubKey = Certificate::fromFile('security_token.pub');
$wsseMiddleware = new WsseMiddleware(
outgoing: [
new Entry\Timestamp(60),
new Entry\BinarySecurityToken($pubKey),
(new Entry\Signature(
$privKey,
new KeyIdentifier\BinarySecurityTokenIdentifier()
))
->withSignatureMethod(SignatureMethod::RSA_SHA256)
->withDigestMethod(DigestMethod::SHA256)
->withSignAllHeaders(true)
->withSignBody(true)
]
);
use Soap\Psr18WsseMiddleware\WSSecurity\KeyStore\Certificate;
use Soap\Psr18WsseMiddleware\WSSecurity\KeyStore\Key;
use Soap\Psr18WsseMiddleware\WSSecurity\SignatureMethod;
use Soap\Psr18WsseMiddleware\WSSecurity\DigestMethod;
use Soap\Psr18WsseMiddleware\WSSecurity\KeyIdentifier;
use Soap\Psr18WsseMiddleware\WsseMiddleware;
use Soap\Psr18WsseMiddleware\WSSecurity\Entry;
use VeeWee\Xml\Dom\Document;
use function VeeWee\Xml\Dom\Locator\document_element;
$privKey = Key::fromFile('security_token.priv')->withPassphrase('xxx');
// These are provided through the STS service.
$samlAssertion = Document::fromXmlString(<<<EOXML
<saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion" AssertionID="xxxx" />
EOXML
);
$samlAssertionId = $samlAssertion->locate(document_element())->getAttribute('AssertionID');
$wsseMiddleware = new WsseMiddleware(
outgoing: [
new Entry\Timestamp(60),
(new Entry\Signature(
$privKey,
new KeyIdentifier\SamlKeyIdentifier($samlAssertionId)
))
->withSignatureMethod(SignatureMethod::RSA_SHA256)
->withDigestMethod(DigestMethod::SHA256)
->withSignAllHeaders(true)
->withSignBody(true)
->withInsertBefore(false),
new Entry\SamlAssertion($samlAssertion),
]
);
use Soap\Psr18WsseMiddleware\WSSecurity\DataEncryptionMethod;
use Soap\Psr18WsseMiddleware\WSSecurity\KeyEncryptionMethod;
use Soap\Psr18WsseMiddleware\WSSecurity\KeyStore\Certificate;
use Soap\Psr18WsseMiddleware\WSSecurity\KeyStore\Key;
use Soap\Psr18WsseMiddleware\WSSecurity\SignatureMethod;
use Soap\Psr18WsseMiddleware\WSSecurity\DigestMethod;
use Soap\Psr18WsseMiddleware\WSSecurity\KeyIdentifier;
use Soap\Psr18WsseMiddleware\WsseMiddleware;
use Soap\Psr18WsseMiddleware\WSSecurity\Entry;
$privKey = Key::fromFile('security_token.priv')->withPassphrase('xxx'); // Private key
$pubKey = Certificate::fromFile('security_token.pub'); // Public X509 cert
$signKey = Certificate::fromFile('sign-key.pem'); // X509 cert for signing. Could be the same as $pubKey.
$wsseMiddleware = new WsseMiddleware(
outgoing: [
new Entry\Timestamp(60),
new Entry\BinarySecurityToken($pubKey),
(new Entry\Signature(
$privKey,
new KeyIdentifier\BinarySecurityTokenIdentifier()
))
(new Entry\Encryption(
$signKey,
new KeyIdentifier\X509SubjectKeyIdentifier($signKey)
))
->withKeyEncryptionMethod(KeyEncryptionMethod::RSA_OAEP_MGF1P)
->withDataEncryptionMethod(DataEncryptionMethod::AES256_CBC)
],
incoming: [
new Entry\Decryption($privKey)
]
);