2

セキュリティで保護された Web サービスで認証するための WSS ヘッダーを作成したいと考えています。

私は醜いを使ってそれを行うことができます:

    $auth = '
     <wsse:Security SOAP-ENV:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
        <wsu:Timestamp wsu:Id="Timestamp-28" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
            <wsu:Created>' . $timestamp . '</wsu:Created>
            <wsu:Expires>' . $timestampExpires . '</wsu:Expires>
        </wsu:Timestamp>
        <wsse:UsernameToken wsu:Id="UsernameToken-27" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
            <wsse:Username>' . $user . '</wsse:Username>
            <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">' . $passdigest . '</wsse:Password>
            <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">' . $encodedNonce . '</wsse:Nonce>
            <wsu:Created>' . $timestamp . '</wsu:Created>
        </wsse:UsernameToken>
     </wsse:Security>';

SimpleXML を使用して、よりクリーンにしようとしています。

しかし、単純なことをしようとすると:

    $xml = new SimpleXMLElement('<wsse:Security/>', 0, false, 'wsse');

私は得る:

警告: SimpleXMLElement::__construct() [simplexmlelement.--construct]: 名前空間エラー: セキュリティの名前空間プレフィックス wsse が定義されていません

名前空間付きの xml を作成する方法に何か欠けていると思います。ヒントを教えてもらえますか?

4

1 に答える 1

0

私は自分の問題を解決する方法を見つけました:

$root = new SimpleXMLElement('<root/>');

$security = $root->addChild('wsse:Security', 'test', 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd');

$root->registerXPathNamespace('wsse', 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd');
$auth = $root->xpath('/root/wsse:Security');
echo htmlentities($auth[0]->asXML());

表示:

<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">test</wsse:Security> 

また、XMLに誤りがあります。名前空間SOAP-ENV:mustUnderstand="1"を定義することはありません。SOAP-ENV

于 2012-12-04T16:31:51.243 に答える