2009-07-06 17 views
7

PHP5のネイティブSOAPメソッドを使用してWebサービスを作成しています。 SOAPヘッダーを使用して認証を処理しようとするまで、すべてうまくいった。PHP Soapサーバのヘッダの収集/処理

私は簡単に、SOAPヘッダにクライアント側をユーザ名/パスワードを追加する方法を見つけることができる:

$myclient = new SoapClient($wsdl, $options); 

$login = new SOAPHeader($wsdl, 'email', 'mylogin'); 
$password = new SOAPHeader($wsdl, 'password', 'mypassword'); 
$headers = array($login, $password); 

$myclient->__setSOAPHeaders($headers); 

しかし、私はどこでもこれらのヘッダサーバーを収集し、処理するための方法を見つけることができません-side。私は、ヘッダーを処理する私のSoapServerのメソッドを定義する簡単な方法があると思います。

答えて

5

SoapClientは、HTTP認証を実装するためにユーザー名とパスワードを使用します。基本認証とダイジェスト認証がサポートされています(see source

サーバ側のPHPでHTTP認証を実装する方法については、this manual pageを参照してください。

HTTP認証を使用しない場合は、SoapServerマニュアルページのthis user-contributed sampleを参照してください。このページには、UsernameTokenヘッダーにいくつかの資格情報を渡す方法が示されています。

+0

のための魔法のように

public function Security($header ){ $this->Authenticated = true; // This should be the result of an authenticating method $this->Username = $header->UsernameToken->Username; $this->Password = $header->UsernameToken->Password; } 

作品SOAPライブラリ、HTTP認証なし。ユーザーが投稿したサンプルを試しましたが、WSDL定義を使用していないときにのみ動作するように見えます。 ヘッダーをWSDL、私は検索を続けます。あなたの入力をありがとうtho。 – altermativ

+0

はい、ヘッダーをWSDLファイルに定義する必要があります。 – Ant

1

RAW POSTデータを読むことができます。

if ($_SERVER['REQUEST_METHOD'] == 'POST') 
{ 
    $xml = file_get_contents('php://input'); 
    print(htmlspecialchars($xml); 
    // XML processing 
} 

すべてのSOAP XMLリクエストがあります。

SOAPヘッダーを読み取るメソッドはありません。

- 編集:マニュアルからの例を貢献したが動作するようには思えない、メソッドを処理ヘッダは、あなたがPHPの現在のバージョンを使用する必要が

1

と呼ばれることは決してありません。 PHP 5.2.4では、同じ問題がありましたが、5.2.17または5.3.8では、SOAPヘッダー処理のコールバック(php.netのユーザー投稿samleで説明されています)が呼び出され、すべて正常に動作します。

5

最新のPHPバージョンでは、ヘッダーはSOAPエンベロープ仕様の一部であるため、WSDLに何かを追加するには、NOTが必要です。ヘッダははUserTokenコメントに書かれたようではないので

ユーザーは、クラスメソッドがすべき名前であることがありますので、ヘッダは、セキュリティであるだけでは動作しませんポール・ディクソンが引用例を拠出しました持ってる。次に、ユーザー名とパスワードをプロパティとして持つUserToken stdClassオブジェクトプロパティを持つ素敵なstdClassオブジェクトを取得します。

SOAPサービスを実装するPHPクラスに挿入するコード例(:私はちょうど使用して、ヘッダーをキャッチしようとしています。ユーザー名/パスワードベースのWSSEソープセキュリティ

関連する問題