SOAP(Simple Object Access Protocol)
SOAP 1.2はWebサービスのためのXMLプロトコル(XMLP)の1つに位置付けられ、W3Cでメッセージングのエンベロープを定めたプロトコルとして現在策定中である*5。前身であるSOAP 1.1*6はノートのステータスでW3Cの正式な勧告ではない。ここではSOAP 1.2に沿ってWebサービス・セキュリティプロトコルのエンベロープとしての役割を簡単に見ておくことにする。SOAP 1.2の仕様の詳細についてはW3CのWebサイトを参照のこと*7。
*5 XMLP http://www.w3.org/2000/xp/Group/
*6 SOAP 1.1 http://www.w3.org/TR/2000/NOTE-SOAP-20000508/
*7
SOAP Version 1.2 Part 0: Primer
http://www.w3.org/TR/2002/WD-soap12-part0-20020626/
SOAP Version 1.2 Part 1: Messaging Framework
http://www.w3.org/TR/2002/WD-soap12-part1-20020626/
SOAP Version 1.2 Part 2: Adjuncts
http://www.w3.org/TR/2002/WD-soap12-part2-20020626/
SOAPはメッセージングのエンベロープの仕様を定めているものであるが、Webサービスのプロトコルとして、要求/応答をRPC(Remote Procedure Call)とする手順も規定している。SOAP自身は特定のトランスポートを定めていない。実際のトランスポートとしてはHTTPなどが想定されている。すなわち、SOAP over HTTPとしてGETやPOSTのプロトコルでSOAPエンベロープがRPCメッセージとして使われることになる。今回述べたXKMSや次回に述べるSAMLやXACMLも、SOAPにエンベロープを使ったHTTPでRPC通信が行われることになる。SOAPエンベロープの構造は図11に示すようにHeader要素とBody要素からなる。
Headerブロックはオプションで用いない場合もあるが、Bodyブロックは必ず存在する。Headerブロックはメッセージパスの中間ノードに対する指示や最終ノードに対する指示で、アプリケーションに依存する。
SOAPメッセージは2つの伝達形式がある。1つは、メッセージの送信者が受信者に一方的にメッセージを送り付けるもので、受信者は処理のステータスを戻さない形式である(Fire and Forget)。もう1つは、要求と応答のプロトコルでメッセージ交換に用いられるものとパラメータを指定してリモートのプロシージャやメソッドを呼び出すRPCがある。RPCの場合、Headerブロックなしで、直接Bodyにパラメータを指定する。
XKMSや次回に述べるSAMLやXACMLの多くのプロトコルがSOAP RPCを用いた要求/応答のプロトコルを用いている。
●トランスポート・プロトコル
SOAP自身は特定のトランスポート・プロトコルを想定していないが、Webサービスのトランスポート・プロトコルとしてはHTTPが用いられる。リモートのプロシージャとしてURIを指定し、パラメータを与え、処理の状態と結果を要求する。
HTTPをSOAPにバインディングする方法として、HTTP GETとHTTP POSTの2つの方法がある。前者はSOAPの応答を要求する場合に用いられ、後者は要求と応答の双方にSOAPを使うRPCに用いられる。XKMSやSAMLなどの要求と応答のプロトコルはSOAPの<Body>に埋められる。以下の例はこれらのセキュリティプロトコルをSOAPにバインドし、これをHTTP POSTで呼び出す例である。
今回はXKMSの機能について詳しく見てきた。W3CのXKMSのWebサイト*8には、XKMSテストのためのPublic Code & ToolkitsとしてEntrustやVeriSignなどの参照コードやライブラリが示されている。今回はまた、これらのプロトコルをSOAPにバインドし、さらにHTTPのトランスポートに乗せる方法についても簡単に述べた。次回は、広いインターネットドメインでのシングルサインオンやアクセス制御を行うためのSAMLについて述べることにする。さらに第5回では、SAMLの上で柔軟で拡張性のある認可サービスを提供するXACMLについて述べる。
「第4回」へ
Copyright © ITmedia, Inc. All Rights Reserved.