http://www.oracle.com/technetwork/articles/soa/fernandes-sso-saml-1965440.html
Security Assertion Markup Language (SAML)を実装し、Oracle Service Bus (OSB)のOracle Web Services Manager (OWSM)からSAP Enterprise Central Component (ECC)にIDを伝播する方法をご紹介します。
Enterprise Resource Planning (ERP)アプリケーションを使ってデータやプロセスにアクセスし、更新している場合、ユーザーのアクティビティ追跡は重要なことです。機密データ(例えば会計や売上の数値)をWebサービスで公開するため、様々なシステム間でユーザーIDを伝播させることが可能なセキュアな環境を提供する必要があります。
この記事では、Security Assertion Markup Language (SAML)を実装して、Oracle Service Bus (OSB)と組み合わせて構成されているOracle Web Services Manager (OWSM)からWebサービスを使ってSAP Enterprise Central Component(ECC)へIDを伝播する方法、必要な構成、Oracle環境の例をご紹介します。
シナリオ
このソリューションはOracle Web Services ManagerとOracle Service Bus 11g (11.1.1.6)、SAP ECC 6.06 SP2の環境で実施したものです。各々のシステムが様々な場所でユーザーを認証します。以前はSAP ERPはR/3として知られていました。このシナリオでは、(アイデンティティプロバイダーとしての)Oracle Services Busが、(サービスプロバイダーとしての)SAP ECCが発行したSAML 1.1のsender-vouchesを使ってWebサービスにアクセスします。SAML 2.0ではなくSAML 1.1を使っているのは、お客様がアーキテクチャの変更を検討しているためです。
Figure 1: Oracle Service Bus / ECC environment |
ビジネス·サービスに適用されるOracle Web Services Managerのポリシーは、SAMLアサーションの生成が必要です。 Oracle Web Services Managerは、アサーションを含むセキュリティ情報を持つメッセージを生成し、署名されたメッセージ本体と共に、ECCを呼び出します。
ECCがSAMLアサーションとセキュリティ情報を検証し、メッセージが検証された場合は、ユーザストア内にユーザーが存在することを確認し、ECCは、Oracle Service Busにレスポンスを返します。
ECCで公開されたサービスは引数としてテキストを一つだけ受け取り、この同じパラメータとユーザー名(SAMLを使用して認証)を連結したものを返します。簡単なテストですが、プラットフォーム間でIDの伝播を確認するには十分です。
構成
WebLogic Server
Oracle WebLogic Serverの組み込みLDAPにユーザーを作成します(例: testsamlclient)。今回のテストでは、このユーザーはプロキシサービスでクライアントを認証します。この同じユーザーもしくは同等のユーザーがECCに存在する必要があります。Oracle Web Services Manager
Oracle Web Services Managerが使うキーストアを構成し、通信に使う証明書をインポートします(Oracle Web Services Managerの秘密鍵、ECCの公開鍵、CA)。 このシナリオではお客様が生成した証明書を使うため、Enterprise CAが証明書発行者です。Enterprise Manager Fusion Middleware Controlにアクセスします。
http://<host>:<port>/emキーストアの設定画面で、キーストアと証明書を構成します。今回は、署名鍵でSAML AssertionとSOAPリクエストの本体に署名します。
<ファーム名>/Weblogicドメイン/<ドメイン名> を開き、[WebLogicドメイン] > [セキュリティ] > [セキュリティプロバイダの構成]へと移動し、 [キーストアの構成]に到達します。
Figure 2: Oracle Web Services Manager Keystore Configuration |
Enterprise Manager Fusion Middleware Controlに再度アクセスし、新しいセキュリティポリシーを構成します。
<ファーム名>/Weblogicドメイン/<ドメイン名> を開き、[WebLogicドメイン] > [Webサービス] > [ポリシー]へと移動します。
Webサービス・ポリシーの画面で、サービス・クライアントに的ようするポリシーを検索します。
[oracle/wss10_saml_token_with_message_integrity_client_policy]を選択し、[類似作成]をクリックします。
Figure 3: Creating a web service policy |
Figure 4: Rename the policy |
Figure 5: Include timestamp |
この問題を解決するため、[構成]タブに移動して、ignore.timestamp.in.responseというプロパティを追加し、その値としてtrueを設定します。この構成により、Oracle Web Services Managerはレスポンス中のタイムスタンプを検証しなくなります。oracle.wsm.security.policy.scenario.policycompliance.PolicyComplianceException: WSM-00036 : The signed message elements or parts do not comply with the policy. The following headers/elements () or attachments ( ) must be signed:- < http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd: Timestamp >
Figure 6: Add a property |
csf-keyプロパティはデフォルトでbasic.credentialsを使うよう定義されています。<FARM>/Weblogicドメイン/<ドメイン名>をクリックし、メニューから [WebLogicドメイン] > [セキュリティ]> [資格証明]へと移動し、testsamlclientユーザーを通知するbasic.credentialsという名前を持つ新しいキーをoracle.wsm.security下に作成します。
Figure 7: Create Key |
実装
Oracle Enterprise Pack for Eclipse (OEPE) を開き、ビジネスサービスをECCのWSDLから生成し、名前を付けます(例:TestSamlClient)。以下はECCのWSDLのサンプルです。
<?xml version="1.0" encoding="utf-8"?> <wsdl:definitions targetNamespace="urn:sap-com:document:sap:soap:functions:mc-style" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsoap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="urn:sap-com:document:sap:soap:functions:mc-style" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:n1="urn:sap-com:document:sap:rfc:functions"> <wsdl:documentation> <sidl:sidl xmlns:sidl="http://www.sap.com/2007/03/sidl"/> </wsdl:documentation> <wsp:UsingPolicy wsdl:required="true"/> <wsp:Policy wsu:Id="BN_BN_YS_SAMLTEST"> <saptrnbnd:OptimizedXMLTransfer uri="http://xml.sap.com/2006/11/esi/esp/binxml" xmlns:saptrnbnd="http://www.sap.com/webas/710/soap/features/transportbinding/" wsp:Optional="true"/> <saptrnbnd:OptimizedMimeSerialization xmlns:saptrnbnd="http://schemas.xmlsoap.org/ws/2004/09/policy/optimizedmimeserialization" wsp:Optional="true"/> <wsp:ExactlyOne xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"> <wsp:All> <sp:AsymmetricBinding xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702" xmlns:sapsp="http://www.sap.com/webas/630/soap/features/security/policy" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:wst="http://docs.oasis-open.org/ws-sx/ws-trust/200512" xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex"> <wsp:Policy> <sp:InitiatorSignatureToken> <wsp:Policy> <sp:X509Token sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient"> <wsp:Policy> <sp:WssX509V3Token10/> </wsp:Policy> </sp:X509Token> </wsp:Policy> </sp:InitiatorSignatureToken> <sp:AlgorithmSuite> <wsp:Policy> <sp:Basic128Rsa15/> </wsp:Policy> </sp:AlgorithmSuite> <sp:Layout> <wsp:Policy> <sp:Strict/> </wsp:Policy> </sp:Layout> <sp:IncludeTimestamp/> <sp:OnlySignEntireHeadersAndBody/> </wsp:Policy> </sp:AsymmetricBinding> <sp:Wss10 xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702" xmlns:sapsp="http://www.sap.com/webas/630/soap/features/security/policy" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:wst="http://docs.oasis-open.org/ws-sx/ws-trust/200512" xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex"> <wsp:Policy> <sp:MustSupportRefKeyIdentifier/> <sp:MustSupportRefIssuerSerial/> </wsp:Policy> </sp:Wss10> <sp:SignedParts xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702" xmlns:sapsp="http://www.sap.com/webas/630/soap/features/security/policy" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:wst="http://docs.oasis-open.org/ws-sx/ws-trust/200512" xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex"> <sp:Body/> <sp:Header Name="Trace" Namespace="http://www.sap.com/webas/630/soap/features/runtime/tracing/"/> <sp:Header Name="messageId" Namespace="http://www.sap.com/webas/640/soap/features/messageId/"/> <sp:Header Name="CallerInformation" Namespace="http://www.sap.com/webas/712/soap/features/runtime/metering/"/> <sp:Header Name="Session" Namespace="http://www.sap.com/webas/630/soap/features/session/"/> <sp:Header Name="To" Namespace="http://schemas.xmlsoap.org/ws/2004/08/addressing"/> <sp:Header Name="From" Namespace="http://schemas.xmlsoap.org/ws/2004/08/addressing"/> <sp:Header Name="FaultTo" Namespace="http://schemas.xmlsoap.org/ws/2004/08/addressing"/> <sp:Header Name="ReplyTo" Namespace="http://schemas.xmlsoap.org/ws/2004/08/addressing"/> <sp:Header Name="MessageID" Namespace="http://schemas.xmlsoap.org/ws/2004/08/addressing"/> <sp:Header Name="RelatesTo" Namespace="http://schemas.xmlsoap.org/ws/2004/08/addressing"/> <sp:Header Name="Action" Namespace="http://schemas.xmlsoap.org/ws/2004/08/addressing"/> <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing"/> <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing"/> <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing"/> <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing"/> <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing"/> <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing"/> <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing"/> <sp:Header Name="ReferenceParameters" Namespace="http://www.w3.org/2005/08/addressing"/> <sp:Header Name="Sequence" Namespace="http://schemas.xmlsoap.org/ws/2005/02/rm"/> <sp:Header Name="SequenceAcknowledgement" Namespace="http://schemas.xmlsoap.org/ws/2005/02/rm"/> <sp:Header Name="AckRequested" Namespace="http://schemas.xmlsoap.org/ws/2005/02/rm"/> <sp:Header Name="SequenceFault" Namespace="http://schemas.xmlsoap.org/ws/2005/02/rm"/> <sp:Header Name="Sequence" Namespace="http://docs.oasis-open.org/ws-rx/wsrm/200702"/> <sp:Header Name="AckRequested" Namespace="http://docs.oasis-open.org/ws-rx/wsrm/200702"/> <sp:Header Name="SequenceAcknowledgement" Namespace="http://docs.oasis-open.org/ws-rx/wsrm/200702"/> <sp:Header Name="SequenceFault" Namespace="http://docs.oasis-open.org/ws-rx/wsrm/200702"/> <sp:Header Name="UsesSequenceSTR" Namespace="http://docs.oasis-open.org/ws-rx/wsrm/200702"/> <sp:Header Name="UsesSequenceSSL" Namespace="http://docs.oasis-open.org/ws-rx/wsrm/200702"/> </sp:SignedParts> <sp:SignedSupportingTokens xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702" xmlns:sapsp="http://www.sap.com/webas/630/soap/features/security/policy" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:wst="http://docs.oasis-open.org/ws-sx/ws-trust/200512" xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex"> <wsp:Policy> <sp:SamlToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient"> <wsp:Policy> <sp:WssSamlV11Token10/> </wsp:Policy> </sp:SamlToken> </wsp:Policy> </sp:SignedSupportingTokens> </wsp:All> </wsp:ExactlyOne> <wsaw:UsingAddressing xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" wsp:Optional="true"/> </wsp:Policy> <wsp:Policy wsu:Id="BN_BN_YS_SAMLTEST_SOAP12"> <saptrnbnd:OptimizedXMLTransfer uri="http://xml.sap.com/2006/11/esi/esp/binxml" xmlns:saptrnbnd="http://www.sap.com/webas/710/soap/features/transportbinding/" wsp:Optional="true"/> <saptrnbnd:OptimizedMimeSerialization xmlns:saptrnbnd="http://schemas.xmlsoap.org/ws/2004/09/policy/optimizedmimeserialization" wsp:Optional="true"/> <wsp:ExactlyOne xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"> <wsp:All> <sp:AsymmetricBinding xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702" xmlns:sapsp="http://www.sap.com/webas/630/soap/features/security/policy" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:wst="http://docs.oasis-open.org/ws-sx/ws-trust/200512" xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex"> <wsp:Policy> <sp:InitiatorSignatureToken> <wsp:Policy> <sp:X509Token sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient"> <wsp:Policy> <sp:WssX509V3Token10/> </wsp:Policy> </sp:X509Token> </wsp:Policy> </sp:InitiatorSignatureToken> <sp:AlgorithmSuite> <wsp:Policy> <sp:Basic128Rsa15/> </wsp:Policy> </sp:AlgorithmSuite> <sp:Layout> <wsp:Policy> <sp:Strict/> </wsp:Policy> </sp:Layout> <sp:IncludeTimestamp/> <sp:OnlySignEntireHeadersAndBody/> </wsp:Policy> </sp:AsymmetricBinding> <sp:Wss10 xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702" xmlns:sapsp="http://www.sap.com/webas/630/soap/features/security/policy" xmlns:wst="http://docs.oasis-open.org/ws-sx/ws-trust/200512" xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex"> <wsp:Policy> <sp:MustSupportRefKeyIdentifier/> <sp:MustSupportRefIssuerSerial/> </wsp:Policy> </sp:Wss10> <sp:SignedParts xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702" xmlns:sapsp="http://www.sap.com/webas/630/soap/features/security/policy" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:wst="http://docs.oasis-open.org/ws-sx/ws-trust/200512" xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex"> <sp:Body/> <sp:Header Name="Trace" Namespace="http://www.sap.com/webas/630/soap/features/runtime/tracing/"/> <sp:Header Name="messageId" Namespace="http://www.sap.com/webas/640/soap/features/messageId/"/> <sp:Header Name="CallerInformation" Namespace="http://www.sap.com/webas/712/soap/features/runtime/metering/"/> <sp:Header Name="Session" Namespace="http://www.sap.com/webas/630/soap/features/session/"/> <sp:Header Name="To" Namespace="http://schemas.xmlsoap.org/ws/2004/08/addressing"/> <sp:Header Name="From" Namespace="http://schemas.xmlsoap.org/ws/2004/08/addressing"/> <sp:Header Name="FaultTo" Namespace="http://schemas.xmlsoap.org/ws/2004/08/addressing"/> <sp:Header Name="ReplyTo" Namespace="http://schemas.xmlsoap.org/ws/2004/08/addressing"/> <sp:Header Name="MessageID" Namespace="http://schemas.xmlsoap.org/ws/2004/08/addressing"/> <sp:Header Name="RelatesTo" Namespace="http://schemas.xmlsoap.org/ws/2004/08/addressing"/> <sp:Header Name="Action" Namespace="http://schemas.xmlsoap.org/ws/2004/08/addressing"/> <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing"/> <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing"/> <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing"/> <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing"/> <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing"/> <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing"/> <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing"/> <sp:Header Name="ReferenceParameters" Namespace="http://www.w3.org/2005/08/addressing"/> <sp:Header Name="Sequence" Namespace="http://schemas.xmlsoap.org/ws/2005/02/rm"/> <sp:Header Name="SequenceAcknowledgement" Namespace="http://schemas.xmlsoap.org/ws/2005/02/rm"/> <sp:Header Name="AckRequested" Namespace="http://schemas.xmlsoap.org/ws/2005/02/rm"/> <sp:Header Name="SequenceFault" Namespace="http://schemas.xmlsoap.org/ws/2005/02/rm"/> <sp:Header Name="Sequence" Namespace="http://docs.oasis-open.org/ws-rx/wsrm/200702"/> <sp:Header Name="AckRequested" Namespace="http://docs.oasis-open.org/ws-rx/wsrm/200702"/> <sp:Header Name="SequenceAcknowledgement" Namespace="http://docs.oasis-open.org/ws-rx/wsrm/200702"/> <sp:Header Name="SequenceFault" Namespace="http://docs.oasis-open.org/ws-rx/wsrm/200702"/> <sp:Header Name="UsesSequenceSTR" Namespace="http://docs.oasis-open.org/ws-rx/wsrm/200702"/> <sp:Header Name="UsesSequenceSSL" Namespace="http://docs.oasis-open.org/ws-rx/wsrm/200702"/> </sp:SignedParts> <sp:SignedSupportingTokens xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702" xmlns:sapsp="http://www.sap.com/webas/630/soap/features/security/policy" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:wst="http://docs.oasis-open.org/ws-sx/ws-trust/200512" xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex"> <wsp:Policy> <sp:SamlToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient"> <wsp:Policy> <sp:WssSamlV11Token10/> </wsp:Policy> </sp:SamlToken> </wsp:Policy> </sp:SignedSupportingTokens> </wsp:All> </wsp:ExactlyOne> <wsaw:UsingAddressing xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" wsp:Optional="true"/> </wsp:Policy> <wsp:Policy wsu:Id="IF_IF_YS_SAMLTEST"> <sapsession:Session xmlns:sapsession="http://www.sap.com/webas/630/soap/features/session/"> <sapsession:enableSession>false</sapsession:enableSession> </sapsession:Session> <sapcentraladmin:CentralAdministration xmlns:sapcentraladmin="http://www.sap.com/webas/700/soap/features/CentralAdministration/" wsp:Optional="true"> <sapcentraladmin:BusinessApplicationID>4FF6C4A0570F00E9E10000000A1D140F</sapcentraladmin:BusinessApplicationID> </sapcentraladmin:CentralAdministration> </wsp:Policy> <wsp:Policy wsu:Id="OP_IF_OP_YsSamltest"> <sapcomhnd:enableCommit xmlns:sapcomhnd="http://www.sap.com/NW05/soap/features/commit/">false</sapcomhnd:enableCommit> <sapblock:enableBlocking xmlns:sapblock="http://www.sap.com/NW05/soap/features/blocking/">true</sapblock:enableBlocking> <saptrhnw05:required xmlns:saptrhnw05="http://www.sap.com/NW05/soap/features/transaction/">no</saptrhnw05:required> <saprmnw05:enableWSRM xmlns:saprmnw05="http://www.sap.com/NW05/soap/features/wsrm/">false</saprmnw05:enableWSRM> </wsp:Policy> <wsdl:types> <xsd:schema attributeFormDefault="qualified" targetNamespace="urn:sap-com:document:sap:rfc:functions"> <xsd:simpleType name="char10"> <xsd:restriction base="xsd:string"> <xsd:maxLength value="10"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="char40"> <xsd:restriction base="xsd:string"> <xsd:maxLength value="40"/> </xsd:restriction> </xsd:simpleType> </xsd:schema> <xsd:schema attributeFormDefault="qualified" targetNamespace="urn:sap-com:document:sap:soap:functions:mc-style" xmlns:n0="urn:sap-com:document:sap:rfc:functions"> <xsd:import namespace="urn:sap-com:document:sap:rfc:functions"/> <xsd:element name="YsSamltest"> <xsd:complexType> <xsd:sequence> <xsd:element name="Text" type="n0:char10" minOccurs="0"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="YsSamltestResponse"> <xsd:complexType> <xsd:sequence> <xsd:element name="Result" type="n0:char40"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> </wsdl:types> <wsdl:message name="YsSamltest"> <wsdl:part name="parameters" element="tns:YsSamltest"/> </wsdl:message> <wsdl:message name="YsSamltestResponse"> <wsdl:part name="parameter" element="tns:YsSamltestResponse"/> </wsdl:message> <wsdl:portType name="YS_SAMLTEST"> <wsp:Policy> <wsp:PolicyReference URI="#IF_IF_YS_SAMLTEST"/> </wsp:Policy> <wsdl:operation name="YsSamltest"> <wsp:Policy> <wsp:PolicyReference URI="#OP_IF_OP_YsSamltest"/> </wsp:Policy> <wsdl:input message="tns:YsSamltest"/> <wsdl:output message="tns:YsSamltestResponse"/> </wsdl:operation> </wsdl:portType> <wsdl:binding name="YS_SAMLTEST" type="tns:YS_SAMLTEST"> <wsp:Policy> <wsp:PolicyReference URI="#BN_BN_YS_SAMLTEST"/> </wsp:Policy> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/> <wsdl:operation name="YsSamltest"> <soap:operation style="document"/> <wsdl:input> <soap:body use="literal"/> </wsdl:input> <wsdl:output> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:binding name="YS_SAMLTEST_SOAP12" type="tns:YS_SAMLTEST"> <wsp:Policy> <wsp:PolicyReference URI="#BN_BN_YS_SAMLTEST_SOAP12"/> </wsp:Policy> <wsoap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/> <wsdl:operation name="YsSamltest"> <wsoap12:operation style="document"/> <wsdl:input> <wsoap12:body use="literal"/> </wsdl:input> <wsdl:output> <wsoap12:body use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="YS_SAMLTEST"> <wsdl:port name="YS_SAMLTEST" binding="tns:YS_SAMLTEST"> <soap:address location="http://poc-sap:8021/sap/bc/srt/rfc/sap/ys_samltest/200/ys_samltest/ys_samltest"/> </wsdl:port> <wsdl:port name="YS_SAMLTEST_SOAP12" binding="tns:YS_SAMLTEST_SOAP12"> <wsoap12:address location="http://poc-sap:8021/sap/bc/srt/rfc/sap/ys_samltest/200/ys_samltest/ys_samltest"/> </wsdl:port> </wsdl:service> </wsdl:definitions>ビジネスサービス作成後、以下のエラーを確認するかと思います。
"[OSB Kernel:398133]The service is based on WSDL with Web Services Security Policies that are not natively supported by Oracle Service Bus. Please select OWSM Policies - From OWSM Policy Store option and attach equivalent OWSM security policy." (See Figure 8参照)
Figure 8: Policy Error |
プロキシサービスをビジネスサービスから作成すると、同じポリシーエラーが出てきます。[Policy]タブで [Service Policy Configuration]を[From Pre-defined Policy or WS-Policy Resource]に変更します。Figure 9では、プロキシサービスにはポリシーは不要です。
Figure 9: Create proxy service
[HTTP Transport]タブで、[Authentication]を[Basic]に変更します。これが必要なのは、ビジネスサービスで、Oracle Web Services Managerが認証済みユーザー名を使ってSAML Assertionを生成するためです。
Oracle Service Busの構成jarファイルをエクスポートします。
Oracle Service Busの構成
Oracle Service Bus管理コンソールにアクセスし、OSB構成jarファイルをサーバーにインポートします。
ビジネスサービスを構成し、Oracle Web Services Managerで作成したカスタムポリシーを追加します。
Figure 10: Service Policy Configuration |
Figure 11: Policy Overrides |
テストの前に
テストの前に検証ポイントをご紹介します。
OracleとSAPのマシンの時計が同期されていることを確認し、ECCで適切なクロックスキューを設定します。未来の時刻、もしくは定義したクロックスキューよりも大きなタイムスタンプを持つメッセージをOracle Service Busが送信すると、ECCは呼びだしを拒否します。SAML Assertionに含まれているユーザーは、ECCでユーザー·ストアの既存のユーザーとマッピングする必要があります。ECCではユーザー名の大文字と小文字を区別します。
ECCがOracle Web Services Managerが使うSAML Issuerを受け入れるように設定しておきましょう。
すべての必要な証明書がキーストアにOracle Web Services ManagerおよびECCにインポートされていることを確認しましょう。
テスト
プロキシサービスのWSDL URLを取得し、サービスをテストします。例えば以下のような具合です。
http://<host>:<port>/TestSecSap/ProxyServices/TestSamlClient?WSDL任意のWebサービスクライアントツール(例えばSoapUIなど)を使ってサービスをテストできます。
WebLogic Serverに作成したユーザーの資格証明を設定することをお忘れなく。
以下はリクエストメッセージのサンプルです。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:sap-com:document:sap:soap:functions:mc-style"> <soapenv:Header/> <soapenv:Body> <urn:YsSamltest> <Text>test</Text> </urn:YsSamltest> </soapenv:Body> </soapenv:Envelope>Oracle Web Services Managerがポリシーを適用すると、ECCに送付されるリクエストは次のように変わります。
<?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:sap-com:document:sap:soap:functions:mc-style"> <soapenv:Header> <wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> <wsse:SecurityTokenReference wsu:Id="STR-SAML-bCgQ6C7G7d3xvJEZ0Ap9Ag22" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> <wsse:KeyIdentifier ValueType="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.0#SAMLAssertionID">SAML-l0sKvVtSFWBxVSfO8DOYOQ22</wsse:KeyIdentifier> </wsse:SecurityTokenReference> <wsu:Timestamp wsu:Id="Timestamp-B8oMUcneIEM0FBP1WSzqiw22" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> <wsu:Created>2013-04-15T20:04:41Z</wsu:Created> <wsu:Expires>2013-04-15T20:09:41Z</wsu:Expires> </wsu:Timestamp> <wsse:BinarySecurityToken ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" EncodingType="http://docs.oasis-open.org/wss/2004/01/ oasis-200401-wss-soap-message-security-1.0#Base64Binary" wsu:Id="BST-umEAXBVw2Neuu90Yk43M6A22" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">MIIG1jCCBb6gAwI...CreDzVTHZz/xXtD2Vl8JsTN/QaKkZ1n88=</wsse:BinarySecurityToken> <saml:Assertion MajorVersion="1" MinorVersion="1" AssertionID="SAML-l0sKvVtSFWBxVSfO8DOYOQ22" IssueInstant="2013-04-15T20:04:41Z" Issuer="www.oracle.com" xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion"> <saml:Conditions NotBefore="2013-04-15T20:04:41Z" NotOnOrAfter="2013-04-15T20:09:41Z"/> <saml:AuthenticationStatement AuthenticationInstant="2013-04-15T20:04:41Z" AuthenticationMethod="urn:oasis:names:tc:SAML:1.0:am:password"> <saml:Subject> <saml:NameIdentifier Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified">testsamlclient</saml:NameIdentifier> <saml:SubjectConfirmation> <saml:ConfirmationMethod>urn:oasis:names:tc:SAML:1.0:cm:sender-vouches</saml:ConfirmationMethod> </saml:SubjectConfirmation> </saml:Subject> </saml:AuthenticationStatement> </saml:Assertion> <dsig:Signature xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"> <dsig:SignedInfo> <dsig:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> <dsig:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/> <dsig:Reference URI="#BST-umEAXBVw2Neuu90Yk43M6A22"> <dsig:Transforms> <dsig:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> </dsig:Transforms> <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> <dsig:DigestValue>buSz7W4V5OQ4FTBZKf8YBIpBC1Y=</dsig:DigestValue> </dsig:Reference> <dsig:Reference URI="#Timestamp-B8oMUcneIEM0FBP1WSzqiw22"> <dsig:Transforms> <dsig:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> </dsig:Transforms> <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> <dsig:DigestValue>psj9Sjk+bPTxUbqu1h8xUahVkrA=</dsig:DigestValue> </dsig:Reference> <dsig:Reference URI="#STR-SAML-bCgQ6C7G7d3xvJEZ0Ap9Ag22"> <dsig:Transforms> <dsig:Transform Algorithm="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#STR-Transform"> <wsse:TransformationParameters> <dsig:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> </wsse:TransformationParameters> </dsig:Transform> </dsig:Transforms> <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> <dsig:DigestValue>gMV488pINPLCAhWMzF6YGmBXySc=</dsig:DigestValue> </dsig:Reference> <dsig:Reference URI="#Body-qp7LuhCcRiNgYpIFe3OIyA22"> <dsig:Transforms> <dsig:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> </dsig:Transforms> <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> <dsig:DigestValue>n6fRqeZ5AOg7GUSST0Y23bIftSg=</dsig:DigestValue> </dsig:Reference> </dsig:SignedInfo> <dsig:SignatureValue>f6TPUUzWLbpPCnpbBBNeIhmy8vp+03V7YWLxCPcSbbPeN1AcUBijFPsH35V90IBmhgbPX366S9Ouu52lYiKNTgWn8UPIEVeKHYKp742dHBSlqyxxVagJ7ddHjHgNbNn5QFuu/re6gcDAOVYwcGRDwpNPg+RnywQKkOfpgxtSdkLWz5ok7TjQcfApnur5gCQvmRsBJwuQcaI3WTuFfWLg5gCj+yazOgUkwb+l7Vbssl8LdTQ1WiQdBKmoAbWci2GL+VFfkaq0dGcYd2/oJLJtrehPiTW6GY/o7TmWY9L8cJOCJo86YPbKjfjn8WHuANe/AQRMAMkKnymUd424xS+C8g==</dsig:SignatureValue> <dsig:KeyInfo Id="KeyInfo-KYpO2OdhC7Q6fmBL1fonww22"> <wsse:SecurityTokenReference> <wsse:Reference URI="#BST-umEAXBVw2Neuu90Yk43M6A22" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/> </wsse:SecurityTokenReference> </dsig:KeyInfo> </dsig:Signature> </wsse:Security> </soapenv:Header> <soapenv:Body wsu:Id="Body-qp7LuhCcRiNgYpIFe3OIyA22" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> <urn:YsSamltest> <!--Optional: --> <Text>test</Text> </urn:YsSamltest> </soapenv:Body> </soapenv:Envelope>ECCはリクエストを検証し、レスポンスをOracle Service Busに返します。
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/"> <soap-env:Header xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> <wsu:Timestamp wsu:Id="ts-516B5F24AE9D1010E10080000A1D123D"> <wsu:Created>2013-04-15T20:04:41Z</wsu:Created> <wsu:Expires>2013-04-15T20:06:11Z</wsu:Expires> </wsu:Timestamp> </wsse:Security> </soap-env:Header> <soap-env:Body> <n0:YsSamltestResponse xmlns:n0="urn:sap-com:document:sap:soap:functions:mc-style"> <Result>Hello testsamlclient - PARAM: test</Result> </n0:YsSamltestResponse> </soap-env:Body> </soap-env:Envelope>Oracle Service Busはレスポンスをクライアントに返します。
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/"> <soap-env:Header xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"/> <soap-env:Body> <n0:YsSamltestResponse xmlns:n0="urn:sap-com:document:sap:soap:functions:mc-style"> <Result>Hello testsamlclient - PARAM: test</Result> </n0:YsSamltestResponse> </soap-env:Body> </soap-env:Envelope>
0 件のコメント:
コメントを投稿