BizTalk發佈WS-Security的web services

 

最近作個項目,biztalkOTMOracle Transportation Management)系統作對接,雙方經過web services通信,這部分是BizTalk發佈WS-Securityweb services,使用WS-SecurityUsername Token驗證方式。java

因此須要使用UsernameToken Web Service Security Policy,並使用HTTPS加密此SOAP消息的傳輸。web

這樣的web services是能夠跟被java客戶端調用的。數據庫

 

https的請求內容格式以下:c#

POST https://URL HTTP/1.1 windows

Content-Type: text/xml; charset=utf-8 測試

SOAPAction: "process" 加密

Host: host spa

Content-Length: 6115 3d

Expect: 100-continue xml

Accept-Encoding: gzip, deflate

Connection: Keep-Alive

 

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">

    <env:Header>

        <ns1:Security>

            <ns1:UsernameToken>

                <ns1:Username>GUEST.ADMIN</ns1:Username>

                <ns1:Password>CHANGEME</ns1:Password>

            </ns1:UsernameToken>

        </ns1:Security>

    </env:Header>

    <env:Body>

        ...your message content goes here...

    </env:Body>

</env:Envelope>

 

 

 

  1. 新建用於發佈web servicdesschema

爲測試目的,新建一個簡單的用於發佈爲web servicdesschema

 

  1. 新建一個簡單的接收請求返回結果的orchestration

爲測試目的,新建一個簡單的接收前面新建的schemarequest,簡單映射爲response的消息直接返回:

  1. orchestration的接收端口發佈爲WCF

部署這個BizTalk project,而後使用BizTalk WCF Services Publishing Wizardorchestration的接收端口發佈爲WCF

要發佈使用WS-Securityweb servicdes必須使用WCF-CustomIsolateTransport type,下一步:

選擇"Publish BizTalk orchestration as WCF Service",下一步:

選擇前面創建的BizTalk projectdll,下一步:

這裏顯示了選擇的dll中包含的orchestrationorchestration包含的能夠發佈爲WCF的接收端口,下一步:

設置發佈的WCFTarget namespace,下一步:

這是指定要發佈到IIS的路徑,同時選擇"Allow anonymous access to WCF servicde",容許IIS中匿名訪問web services,由於用戶的身份驗證是在消息內的。

發佈完成後,在BizTalkApplication中會生成一個WCF-CustomIsolate的接收端口:

  1. 設置WCF-CustomIsolate接收位置的Application Pools

發佈的WCF-CustomIsolate的接收位置在IIS中生成的ApplicationApplication Pool默認使用DefaultAppPool,這個Application PoolIdentityWindows內建的ApplicationPoolIdentity帳號,不具備訪問BizTalk數據庫的權限,因此須要將Application Pool改成具備訪問BizTalk數據庫的權限IdentityApplication Pool

不然訪問發佈的WCF會出現這樣的提示:

  1. 設置WCF-CustomIsolate接收位置的配置

查看WCF-CustomIsolate的屬性:

點擊"Configure…":

 

修改這裏的Binding

  1. 增長security Extension

增長security Extension,並把它移動到最頂層的位置,並把authenticationMode設置爲UserNameOverTransport

 

  1. 設置textMessageEncoding Extension

textMessageEncodingmessageVersion設置爲"Soap11":

 

  1. httpTransport改成httpsTransport

刪除httpTransport Extension,增長httpsTransport,由於須要使用TLS進行消息的加密傳輸:

  1. 增長ServicesBehavior

Behavior標籤下,增長serviceCredentialsserviceBehaviors

確認在UserNameAuthentication下的userNamePasswordValidationMode設置爲Windows,表示驗證客戶端的UsernameToken將使用Windows的用戶驗證,即客戶端的UsernameToken將跟windows的用戶進行比對,若是windows的用戶有跟客戶端的UsernameToken匹配的即驗證成功。

  1. 測試發佈的WCF

能夠新建一個簡單的c# console應用做爲客戶端調用發佈的WCF,而後用Fiddler抓取通信的數據格式,判斷髮布的WCF是否符合WS-Security

c# console應用中引用前面發佈的WCF

 

具體調用WCF的代碼以下:

其中的chnkingwindows的用戶,Jjz123356是這個windows用戶的密碼。

執行這段代碼執行調用WCF的過程,使用Fiddler抓取數據查看請求消息格式爲:

能夠看到這個請求調用web services的消息格式徹底符合WS-Security的格式。

再看,返回的消息格式:

能夠看到,服務端返回的正常的結果。

相關文章
相關標籤/搜索