これは、スタック オーバーフローに関する私の最初の質問です。
私は専門の Java プログラマーではありませんが、Java 言語とさまざまな IDE の経験があります。
UsernameToken Profile 1.0 OASIS Standard 200401 を使用して認証する必要があるサービスを、特定の WSDl から作成することを顧客が要求するシナリオがあります。これは、運用サーバーの ssl で保護されます。
私はいくつかの調査を行っており、さまざまなケースを実装しようとしましたが、何も適切に機能していないところに到達しました。
私は使用しています:
- ベース IDE としての Eclipse
- 軸2 V1.6.3
- ランパート V1.6.2
- ラハス V1.6.2
現在の状況を説明するために、ここでは、ベース IDE として wsdl Eclipse から Java Bean サービス構造を生成するときに、Eclipse が作成する構造を示します。
https://dl.dropboxusercontent.com/u/71031985/schema.png
構成が適用されました:
WebContent/WEB-INF/conf/axis2.xml で、rampart モジュールと passwordCallbackClass を有効にして、SOAP ヘッダーで提供されるユーザー名とパスワードを処理できるようにします。
<module ref="rampart" />
<parameter name="InflowSecurity">
<action>
<items>UsernameToken</items>
<passwordCallbackClass>
serviceManager.ServiceAuthUserNameToken
</passwordCallbackClass>
<passwordType>PasswordText</passwordType>
</action>
</parameter>
...
/WebContent/WEB-INF/services/ProveedorCentroTFWS/META-INF/services.xml にあるファイルに、ユーザー名トークンの要件を達成できるように城壁ポリシーを配置します。
<wsp:Policy wsu:Id="UTOverTransport" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
<wsp:ExactlyOne>
<wsp:All>
<sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
<wsp:Policy>
<sp:TransportToken>
<wsp:Policy>
<sp:HttpsToken RequireClientCertificate="false"/>
</wsp:Policy>
</sp:TransportToken>
<sp:AlgorithmSuite>
<wsp:Policy>
<sp:Basic128/>
</wsp:Policy>
</sp:AlgorithmSuite>
<sp:Layout>
<wsp:Policy>
<sp:Lax/>
</wsp:Policy>
</sp:Layout>
<sp:IncludeTimestamp/>
</wsp:Policy>
</sp:TransportBinding>
<sp:SignedSupportingTokens xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
<wsp:Policy>
<sp:UsernameToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient" />
</wsp:Policy>
</sp:SignedSupportingTokens>
<ramp:RampartConfig xmlns:ramp="http://ws.apache.org/rampart/policy">
<ramp:passwordCallbackClass>serviceManager.ServiceAuthUserNameToken</ramp:passwordCallbackClass>
</ramp:RampartConfig>
</wsp:All>
</wsp:ExactlyOne>
顧客から提供された (変更できない) テスト クライアントから呼び出しを実行すると、次の SOAP メッセージが送信されます。
<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" soapenv:mustUnderstand="1">
<wsse:UsernameToken wsu:Id="UsernameToken-3">
<wsse:Username>username</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">definedpwd</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
<wsa:To>http://localhost:8080/ProveedorCentroTFWS</wsa:To>
<wsa:MessageID>urn:uuid:f2fb54d9-8957-49a2-88a7-de6d209e6d35</wsa:MessageID>
<wsa:Action>getActionList</wsa:Action>
</soapenv:Header>
<soapenv:Body>
<ns3:getActionListxmlns:ns3="http://impl.ws.application.proveedorcentro.meyss.spee.es" />
</soapenv:Body>
ソープ メッセージが送信されると、返されるエラーは次のとおりです。
java.lang.RuntimeException: Malformed uri: UsernameTokenPolicy
そして、それに続くスタック トレースは次のとおりです。
org.apache.neethi.PolicyReference.getRemoteReferencedPolicy(PolicyReference.java:155)
org.apache.neethi.PolicyReference.normalize(PolicyReference.java:110)
org.apache.axis2.util.PolicyUtil.getMergedPolicy(PolicyUtil.java:267)
org.apache.axis2.description.AxisBindingMessage.calculateEffectivePolicy(AxisBindingMessage.java:294)
org.apache.axis2.description.AxisBindingMessage.getEffectivePolicy(AxisBindingMessage.java:225)
org.apache.axis2.context.MessageContext.getEffectivePolicy(MessageContext.java:1617)
org.apache.rampart.RampartMessageData.<init>(RampartMessageData.java:233)
org.apache.rampart.MessageBuilder.build(MessageBuilder.java:61)
org.apache.rampart.handler.RampartSender.invoke(RampartSender.java:65)
org.apache.axis2.engine.Phase.invokeHandler(Phase.java:340)
org.apache.axis2.engine.Phase.invoke(Phase.java:313)
org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:262)
org.apache.axis2.engine.AxisEngine.sendFault(AxisEngine.java:516)
org.apache.axis2.transport.http.AxisServlet.handleFault(AxisServlet.java:433)
org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:216)
javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
石鹸メッセージを受け入れるようにすべての方法をチェックしましたが、機能させることができません。
あなたのサポートと注意に感謝します