我正在尝试使用 SOAP Web 服务,该服务使用 WS-Security 进行 PL/SQL 中的身份验证,但是我过得很糟糕,因为我没有找到任何关于它的好信息。所以我想请求我如何使用 pl/sql (oracle) 中的 ws_security 来使用 sopa ewb 服务
最好的问候, 亚历山大
我正在尝试使用 SOAP Web 服务,该服务使用 WS-Security 进行 PL/SQL 中的身份验证,但是我过得很糟糕,因为我没有找到任何关于它的好信息。所以我想请求我如何使用 pl/sql (oracle) 中的 ws_security 来使用 sopa ewb 服务
最好的问候, 亚历山大
我有同样的问题。然而这是可能的。您可能已经发现,在 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;