0

PL/SQL での認証に WS-Security を使用する SOAP Web サービスを使用しようとしていますが、それに関する適切な情報が見つからないため、苦労しています。そこで、pl/sql (oracle) で ws_security を使用して sopa ewb サービスを利用する方法をリクエストしたいと思います。

よろしく、 アレクサンドル

4

1 に答える 1

3

これと同じ問題がありました。ただし、可能です。お気づきかもしれませんが、Java または SoapUI で呼び出しを設定するのは非常に簡単です。これは、すべての WS-Security が組み込まれているか、ライブラリで利用できるためです。PL/SQL からこれを行う場合、WS-Security ヘッダーを手動で作成する必要があります。ただし、エンドポイントがユーザー名トークン認証を期待している場合、これは非常に簡単です。

この例は、SOAP Envelope を作成して WSO2 ESB のエンドポイントへの Web サービス呼び出しを行うために使用した関数のスニペットです。

FUNCTION getSoapRequest RETURN CLOB
IS
   lUserName    VARCHAR2(100) := 'myuser';
   lPassword    VARCHAR2(100) := 'mypassword';
   lSoapRequest CLOB;
BEGIN
   --Get your Created and Expiration Timestamps for the Token (In this case it is 3 minutes)
   SELECT  TO_CHAR(SYSDATE + (4/24), 'YYYY-MM-DD')||'T'||TO_CHAR(SYSDATE + (4/24), 'HH24:MI:SS')||'Z'
          ,TO_CHAR(SYSDATE + (3/1440) + (4/24), 'YYYY-MM-DD')||'T'||TO_CHAR(SYSDATE + (3/1440) + (4/24), 'HH24:MI:SS')||'Z'
    INTO   lCreateTimestampString, 
          ,lExpireTimestampString
    FROM   dual;

       lSoapRequest :='<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:Cisco_IncidentCreateWS_ext">
                          <soapenv:Header>
                             <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
                               <wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Timestamp-14">
                                   <wsu:Created>'||lCreateTimestampString||'</wsu:Created>
                                   <wsu:Expires>'||lExpireTimestampString||'</wsu:Expires>
                                </wsu:Timestamp>
                               <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="UsernameToken-13">
                                <wsse:Username>'||lUserName||'</wsse:Username>
                                <wsse:Password Type="wsse:PasswordText">'||lPassword||'</wsse:Password>
                               </wsse:UsernameToken>
                              </wsse:Security>
                           </soapenv:Header>
                           <soapenv:Body>
                           …
                           </soapenv:Body>
                        </soapenv:Envelope>';

   RETURN lSoapRequest;
END getSoapRequest;
于 2013-10-31T05:55:00.077 に答える