使用SoapUI调用不同的安全WCF SOAP服务-基本身份验证,第一部分
在這個(gè)分為三部分的系列中,我將演示如何使用SoapUI API工具來(lái)調(diào)用安全的WCF SOAP服務(wù)。 第一篇文章將著重于創(chuàng)建將要測(cè)試的系統(tǒng)的服務(wù)。 第二篇文章將介紹在基本身份驗(yàn)證機(jī)制保護(hù)的情況下調(diào)用它所需的步驟。 在最后一部分中,我將對(duì)初始服務(wù)稍作更改,以使其受證書(shū)認(rèn)證機(jī)制的保護(hù)。 在同一篇文章中,我還將演示如何使用SoapUI調(diào)用它。
WCF基本身份驗(yàn)證服務(wù)
使用“ 基本身份驗(yàn)證”傳輸安全性機(jī)制來(lái)保護(hù)對(duì)本文中要實(shí)現(xiàn)的服務(wù)中的資源的訪問(wèn)。 Windows Communication Foundation 提供的眾多功能之一。 這種機(jī)制與HTTPS結(jié)合使用以提供機(jī)密性。
這項(xiàng)服務(wù)公開(kāi)了一個(gè)端點(diǎn),該端點(diǎn)計(jì)算出很大的一筆款項(xiàng) 。 為了快速入門(mén),我們將使用Visual Studio 2019中提供的WCF服務(wù)應(yīng)用程序的默認(rèn)模板。
在菜單文件中,依次單擊新建,項(xiàng)目,或單擊開(kāi)始頁(yè)面開(kāi)始一個(gè)新項(xiàng)目。 讓我們將解決方案和項(xiàng)目命名為AVeryBigSum_BasicAuthentication 。
現(xiàn)在,您將看到已經(jīng)添加到WCF服務(wù)項(xiàng)目中的幾個(gè)文件。 我們可以選擇刪除接口IService1.cs和服務(wù)Service1.svc文件來(lái)創(chuàng)建新文件。 否則,我們可以重命名這兩個(gè)文件,因此請(qǐng)注意重命名以及Service.svc文件的標(biāo)記,方法是右鍵單擊它->“ 查看標(biāo)記”并更改為以下名稱(chēng)。
<%@ ServiceHost Language="C#" Debug="true" Service="AVeryBigSum_BasicAuthentication.Avbs" CodeBehind="Avbs.svc.cs" %>重命名兩個(gè)文件后,打開(kāi)IAvbs.cs,復(fù)制以下代碼并將其添加到修改后的界面中。
using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.ServiceModel.Web; using System.Text;namespace AVeryBigSum_BasicAuthentication {[ServiceContract]public interface IAvbs{[OperationContract]long AVeryBS(long[] ar);} }如果您選擇刪除這些文件,則可以通過(guò)右鍵單擊項(xiàng)目并添加新項(xiàng)來(lái)添加新界面。 選擇接口模板并將其重命名為IAvbs。 同樣,您需要復(fù)制上面的代碼并將其添加到新創(chuàng)建的界面中。
該服務(wù)僅實(shí)現(xiàn)接口協(xié)定中定義的一項(xiàng)操作。 要實(shí)現(xiàn)它,我們需要修改VStudio創(chuàng)建的默認(rèn)文件或添加一個(gè)新服務(wù)類(lèi)Avbs.svc,它將實(shí)現(xiàn)上面定義的接口。
using System; /*...*/ namespace AVeryBigSum_BasicAuthentication {public class Avbs : IAvbs{public long AVeryBS(long[] ar){long aVeryBigSum = 0;foreach (long i in ar) aVeryBigSum += i;return aVeryBigSum;}} }到目前為止,我們已經(jīng)定義了服務(wù)合同,即帶有示例定義的操作。 現(xiàn)在我們必須定義其端點(diǎn)。 要添加端點(diǎn),我們需要更改配置文件(web.config)。 除了復(fù)制和粘貼外,我們還需要了解每個(gè)WCF標(biāo)簽的重要性。
使用SoapUI 1-Secure WCF SOAP – AppSettings
因此,讓我們從AppSettings元素開(kāi)始。 此元素包含自定義應(yīng)用程序設(shè)置。 該元素存儲(chǔ)定制應(yīng)用程序配置信息,例如數(shù)據(jù)庫(kù)連接字符串,文件路徑,XML Web服務(wù)URL或應(yīng)用程序的任何其他定制配置信息。
我們使用此元素來(lái)存儲(chǔ)服務(wù)的用戶(hù)和密碼憑據(jù)。 使用ConfigurationSettings庫(kù)以這種方式在代碼中訪問(wèn)元素中指定的鍵/值對(duì),即ConfigurationManager.AppSettings [“ AVeryBigSum_User”]。
<appSettings><add key="aspnet:UseTaskFriendlySynchronizationContext" value="true"/><add key="AVeryBigSum_User" value="AVeryBigSum"/><add key="AVeryBigSum_Pass" value="12345"/></appSettings>因此,我們可以更改這些憑據(jù),而無(wú)需重建項(xiàng)目的動(dòng)態(tài)鏈接庫(kù)文件 (DLL)。
盡管使用上述元素具有優(yōu)勢(shì),但與服務(wù)的定義有關(guān)的所有魔術(shù)都發(fā)生在ServiceModel標(biāo)記的邊界中。
使用SoapUI 2保護(hù)WCF SOAP –行為
該標(biāo)簽定義了端點(diǎn)和服務(wù)分別消耗的協(xié)議元素。 服務(wù)憑證元素對(duì)于定義至關(guān)重要。 它指定了身份驗(yàn)證過(guò)程中使用的自定義驗(yàn)證模式。
<behaviors><serviceBehaviors><behavior name="DebugModeBehavior"><!-- To avoid disclosing metadata information, set the values below to false before deployment --><serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/><!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --><serviceDebug includeExceptionDetailInFaults="true"/><!--For UserPass Authentication--><serviceCredentials><userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="AVeryBigSum_BasicAuthentication.ServiceAuthenticator, AVeryBigSum_BasicAuthentication"/></serviceCredentials></behavior></serviceBehaviors></behaviors>在服務(wù)憑證 s中,定義了另一個(gè)重要屬性,用于指定用戶(hù)名和密碼驗(yàn)證的設(shè)置。 userNamePasswordValidationMode屬性設(shè)置如何驗(yàn)證憑據(jù)。 我們的服務(wù)使用自定義類(lèi)來(lái)驗(yàn)證憑據(jù)。 此類(lèi)AVeryBigSum.ServiceAuthenticator可在AVeryBigSum項(xiàng)目中找到。
使用SoapUI的3-安全WCF SOAP –綁定
WCF服務(wù)中的每個(gè)終結(jié)點(diǎn)都需要明確指定綁定。 綁定由綁定元素的有序堆棧組成,每個(gè)綁定元素指定連接到服務(wù)端點(diǎn)所需的一部分通信信息。
如我們所見(jiàn),我們正在使用WSHttpBinding。 它表示可互操作的綁定,該綁定支持分布式事務(wù),安全,可靠的會(huì)話。
<bindings><wsHttpBinding><!-- configure wsHttp binding with Transport security mode and clientCredentialType as Certificate --><binding name="wsHttpBinding_LargeBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" bypassProxyOnLocal="false"transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="250000000" maxReceivedMessageSize="250000000" messageEncoding="Text"textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false"><readerQuotas maxDepth="2000000" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/><reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false"/><!--For UserPass Authentication--><security mode="TransportWithMessageCredential"><message clientCredentialType="UserName" establishSecurityContext="false"/></security></binding></wsHttpBinding></bindings>WSHttpBinding使用HTTP傳輸并提供消息安全性,事務(wù),可靠的消息傳遞和WS-Addressing,它們是默認(rèn)啟用的,也可以通過(guò)單個(gè)控件設(shè)置使用。
在WSHttpBinding元素內(nèi)部,我們將安全模式定義為T(mén)ransportWithMessageCredential。 傳輸確定提供傳輸級(jí)別安全性的實(shí)際機(jī)制。 對(duì)于HTTP,該機(jī)制是基于HTTP(HTTPS)的安全套接字層(SSL);
使用SoapUI的4種安全WCF SOAP –服務(wù)
最后,在服務(wù)元素上,我們定義了終結(jié)點(diǎn),公開(kāi)了服務(wù)元數(shù)據(jù)。 發(fā)布元數(shù)據(jù)(如描述服務(wù)使用的所有方法和數(shù)據(jù)類(lèi)型的Web服務(wù)描述語(yǔ)言(WSDL)文檔)很有用。 SoapUi將在此傳奇的下一篇文章中使用它來(lái)檢索和調(diào)用所有可服務(wù)的端點(diǎn)。
<services><service behaviorConfiguration="DebugModeBehavior" name="AVeryBigSum_BasicAuthentication.Avbs"><endpoint address="endpointAVeryBigSum_BasicAuthentication" binding="wsHttpBinding"bindingConfiguration="wsHttpBinding_LargeBinding" name="EndpointAVeryBigSum_BasicAuthentication"contract="AVeryBigSum_BasicAuthentication.IAvbs" /><endpoint address="mex" binding="wsHttpBinding" bindingConfiguration="wsHttpBinding_LargeBinding"name="mexEndpoint" contract="IMetadataExchange" /></service></services>使用SoapUI的5種安全WCF SOAP –自定義驗(yàn)證器類(lèi)
定制驗(yàn)證器擴(kuò)展了UserNamePasswordValidator類(lèi),并覆蓋了Validate方法。 該驗(yàn)證器在“服務(wù)行為”中定義為默認(rèn)授權(quán)管理器,如上面行為部分中所示。 此類(lèi)將客戶(hù)端調(diào)用接收到的信息與AppsSetting元素中定義的信息進(jìn)行比較。
using Microsoft.IdentityModel.Tokens; using System; using System.Collections.Generic; using System.Configuration; using System.IdentityModel.Selectors; using System.Linq; using System.ServiceModel; using System.Web; namespace AVeryBigSum_BasicAuthentication {public class ServiceAuthenticator : UserNamePasswordValidator{public override void Validate(string userName, string password){if (string.IsNullOrEmpty(userName) || string.IsNullOrEmpty(password))throw new SecurityTokenException("Username and password required");if (!(userName == ConfigurationManager.AppSettings["AVeryBigSum_User"] && password == ConfigurationManager.AppSettings["AVeryBigSum_Pass"]))throw new FaultException(string.Format("Wrong username ({0}) or password ", userName));}} }為了使此類(lèi)正常工作,我們需要在項(xiàng)目中添加兩個(gè)外部庫(kù)。 我們可以通過(guò)右鍵單擊項(xiàng)目-> Manage NuGet Packages,瀏覽Microsoft.IdentityModel.Logging和Microsoft.IdentityModel.Tokens軟件包并添加兩者來(lái)完成此操作。
現(xiàn)在我們已經(jīng)定義了端點(diǎn),接下來(lái),我們將服務(wù)托管在本地開(kāi)發(fā)服務(wù)器中。
部署并運(yùn)行服務(wù)
1 –要將我們的服務(wù)托管在IIS中,請(qǐng)右鍵單擊該項(xiàng)目,然后轉(zhuǎn)到“ 屬性” 。 在屬性窗口中,選擇“ Web”選項(xiàng)卡。
2-現(xiàn)在在“ Web上的服務(wù)器”設(shè)置下,您將看到以下詳細(xì)信息,將“ IIS Express”更改為“ IIS Server”。
3 –現(xiàn)在,單擊使用以管理員身份運(yùn)行的Visual Studio創(chuàng)建虛擬目錄。 您將收到一條消息:虛擬目錄已成功創(chuàng)建! 否則,您將收到一條錯(cuò)誤消息,并且需要以管理員身份再次啟動(dòng)Visual Studio。
現(xiàn)在按F5鍵,您的應(yīng)用程序?qū)⒃贗IS服務(wù)器而不是IIS express上啟動(dòng)并運(yùn)行。
結(jié)論
在本演示結(jié)束時(shí),我們將提供一個(gè)由SoapUI調(diào)用的安全服務(wù)。 我們的下一篇文章將逐步演示如何做到這一點(diǎn)。
另外,可以從GitHub存儲(chǔ)庫(kù)訪問(wèn)該示例; 要下載它,請(qǐng)點(diǎn)擊此鏈接 。
翻譯自: https://www.javacodegeeks.com/2020/04/invoking-different-secure-wcf-soap-services-using-soapui-basic-authentication-part-i.html
總結(jié)
以上是生活随笔為你收集整理的使用SoapUI调用不同的安全WCF SOAP服务-基本身份验证,第一部分的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: vivo手机官网(vivo手机官网登录)
- 下一篇: 为什么在生产中进行硒自动化测试对于您的下