cXMLメッセージのヘッダーは下記のように記述されます。
<?xml version="1.0" encoding="UTF-8"?> <!-- このcXMLドキュメントの規定を含むDTDを記載 --> <!DOCTYPE cXML SYSTEM "http://xml.cxml.org/schemas/cXML/1.2.054/cXML.dtd"> <!-- payloadIDが関連するRequest/Response/Messageを紐つけるので重要な情報です --> <cXML timestamp="2022-10-28T16:56:03-08:00" payloadID="12345666@10.10.83.39"> <Header> <!-- このリクエストを送っている組織の、受信/中継側システムが判別しうる情報(組織)を記載 --> <From> <!-- IdentityにはDUNS/NetworkIDまたは弊社システムに登録したIDを指定できます --> <Credential domain="DUNS"> <Identity>123456789</Identity> </Credential> </From> <!-- このリクエストの宛先である組織の、受信/中継側システムが判別しうる情報(組織)を記載 --> <To> <Credential domain="NetworkID"> <Identity>AN01000000001</Identity> </Credential> </To> <!-- Fromで示された組織の、受信/中継側システムが判別しうるユーザー情報(組織や個人)を記載 --> <Sender> <Credential domain="DUNS"> <!-- FromとSenderのIdentityは必ずしも同じである必要はありませんが、相互の紐つけが正しい必要があります --> <Identity>123456789</Identity> <!-- Senderにはパスワードが含まれ、これを用いてNetworkによりユーザー認証が行われます --> <!-- RequestがNetworkにより転送された場合はSender情報はNetworkの情報に書き換わります --> <!-- 平文パスワードを用いる場合 --> <SharedSecret>abracadabra</SharedSecret> <!-- 「CredentialMAC」を用いる場合 --> <CredentialMac type="FromSenderCredentials" <!-- 利用可能なアルゴリズムは現状では「HMAC-SHA1-96」のみです --> <!-- 現在では十分な堅牢性を持つか賛否があり、弊社では時代に即したアルゴリズムの選択余地を持たせる予定です --> algorithm="HMAC-SHA1-96" <!-- Network側でもCredentialMACを生成できるよう生成時刻を記載します --> creationDate="2022-08-15T08:42:46-0800" <!-- この時刻を過ぎると認証に使えない旨を示します(通常は生成から3時間) --> expirationDate="2022-01-15T11:42:46-0800"> <!-- 「CredentialMAC」の値は生成時刻ごとに変化するので盗み見られても再利用できないのが特徴です --> MnXkusp8Jj0lw3mf </CredentialMac> </Credential> <!-- このRequestを送出しているアプリケーションの名称(任意) --> <UserAgent>Procurement Application 8.1</UserAgent> </Sender> </Header> <Request> <!-- 各リクエストが記載される --> </Request> </cXML>
弊社のNetworkシステムはPOSTされたXMLを以下の順序で処理を行います。これらのいずれかでエラーが検出された時点で処理を中止しResponseとしてエラーを返します。
- POSTされたXMLが全体として一般的なXMLとしてパース可能なwell-formedなXMLであるかを確認
- なお、cXMLとしてwell-formedかどうかの検証は送信者と受信者にて行う(相互で取り決めた特殊性がある場合の猶予)
- timestamp, payloadIDに情報が記入されていることを確認
- FromのIdentityに記載された情報に該当するユーザーがNetworkに登録されて利用可能な状態であることを確認
- ToのIdentityに記載された情報に該当するユーザーがNetworkに登録されて利用可能な状態であることを確認
- SenderのIdentityに記載された情報に該当するユーザーがNetworkに登録されて利用可能な状態であることを確認
- Senderの「SharedSecret」または「CredentialMAC」の情報でユーザーの認証を行う
- なお、Senderに「SharedSecret」と「CredentialMAC」の両方が存在した場合は「SharedSecret」のみでユーザー認証を行う
- ToのIdentityがNetwork自身なのか(A)それ以外なのか(B)で異なる下記いずれか処理を行う
A. ToのIdentityがNetwork自身の場合:
8.1. Requestの内容をパースしてNetworkにて必要な内部処理があれば行う
8.2. Networkでの処理結果をもとにResponseを返信するB. ToのIdentityがNetworkではない場合:
8.1. 受け取ったXMLのHeaderのSender情報をNetworkのものに置き換える(SharedSecretはToのホストがNetworkに登録したもの)
8.2. Requestの内容をパースせずにToのホストに対してXMLをPOSTする
8.3. Toのホストから返ってきたResponseを元のホストの返送する(ResponseにはHeaderは無いので) - トランザクション終了