使用SoapUI调用不同的安全WCF SOAP服务-基本身份验证,第一部分

在这个分为三部分的系列中,我将演示如何使用SoapUI API工具来调用安全的WCF SOAP服务。 第一篇文章将着重于创建将要测试的系统的服务。 第二篇文章将介绍在基本身份验证机制保护的情况下调用它所需的步骤。 在最后一部分中,我将对初始服务稍作更改,以使其受证书认证机制的保护。 在同一篇文章中,我还将演示如何使用SoapUI调用它。

WCF基本身份验证服务

使用“ 基本身份验证”传输安全性机制来保护对本文中要实现的服务中的资源的访问。 Windows Communication Foundation 提供的众多功能之一。 这种机制与HTTPS结合使用以提供机密性。

这项服务公开了一个端点,该端点计算出很大的一笔款项 。 为了快速入门,我们将使用Visual Studio 2019中提供的WCF服务应用程序的默认模板。

在菜单文件中,依次单击新建,项目,或单击开始页面开始一个新项目。 让我们将解决方案和项目命名为AVeryBigSum_BasicAuthentication

现在,您将看到已经添加到WCF服务项目中的几个文件。 我们可以选择删除接口IService1.cs和服务Service1.svc文件来创建新文件。 否则,我们可以重命名这两个文件,因此请注意重命名以及Service.svc文件的标记,方法是右键单击它->“ 查看标记”并更改为以下名称。

<%@ ServiceHost Language="C#" Debug="true"
Service="AVeryBigSum_BasicAuthentication.Avbs" CodeBehind="Avbs.svc.cs" %>

重命名两个文件后,打开IAvbs.cs,复制以下代码并将其添加到修改后的界面中。

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);}
}

如果您选择删除这些文件,则可以通过右键单击项目并添加新项来添加新界面。 选择接口模板并将其重命名为IAvbs。 同样,您需要复制上面的代码并将其添加到新创建的界面中。

该服务仅实现接口协定中定义的一项操作。 要实现它,我们需要修改VStudio创建的默认文件或添加一个新服务类Avbs.svc,它将实现上面定义的接口。

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;}}
}

到目前为止,我们已经定义了服务合同,即带有示例定义的操作。 现在我们必须定义其端点。 要添加端点,我们需要更改配置文件(web.config)。 除了复制和粘贴外,我们还需要了解每个WCF标签的重要性。

使用SoapUI 1-Secure WCF SOAP – AppSettings

因此,让我们从AppSettings元素开始。 此元素包含自定义应用程序设置。 该元素存储定制应用程序配置信息,例如数据库连接字符串,文件路径,XML Web服务URL或应用程序的任何其他定制配置信息。

我们使用此元素来存储服务的用户密码凭据。 使用ConfigurationSettings库以这种方式在代码中访问元素中指定的键/值对,即ConfigurationManager.AppSettings [“ AVeryBigSum_User”]。

<appSettings><add key="aspnet:UseTaskFriendlySynchronizationContext" value="true"/><add key="AVeryBigSum_User" value="AVeryBigSum"/><add key="AVeryBigSum_Pass" value="12345"/></appSettings>

因此,我们可以更改这些凭据,而无需重建项目的动态链接库文件 (DLL)。

尽管使用上述元素具有优势,但与服务的定义有关的所有魔术都发生在ServiceModel标记的边界中。

使用SoapUI 2保护WCF SOAP –行为

该标签定义了端点和服务分别消耗的协议元素。 服务凭证元素对于定义至关重要。 它指定了身份验证过程中使用的自定义验证模式。

<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>

服务凭证 s中,定义了另一个重要属性,用于指定用户名和密码验证的设置。 userNamePasswordValidationMode属性设置如何验证凭据。 我们的服务使用自定义类来验证凭据。 此类AVeryBigSum.ServiceAuthenticator可在AVeryBigSum项目中找到。

使用SoapUI的3-安全WCF SOAP –绑定

WCF服务中的每个终结点都需要明确指定绑定。 绑定由绑定元素的有序堆栈组成,每个绑定元素指定连接到服务端点所需的一部分通信信息。

如我们所见,我们正在使用WSHttpBinding。 它表示可互操作的绑定,该绑定支持分布式事务,安全,可靠的会话。

<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传输并提供消息安全性,事务,可靠的消息传递和WS-Addressing,它们是默认启用的,也可以通过单个控件设置使用。

在WSHttpBinding元素内部,我们将安全模式定义为TransportWithMessageCredential。 传输确定提供传输级别安全性的实际机制。 对于HTTP,该机制是基于HTTP(HTTPS)的安全套接字层(SSL);

使用SoapUI的4种安全WCF SOAP –服务

最后,在服务元素上,我们定义了终结点,公开了服务元数据。 发布元数据(如描述服务使用的所有方法和数据类型的Web服务描述语言(WSDL)文档)很有用。 SoapUi将在此传奇的下一篇文章中使用它来检索和调用所有可服务的端点。

<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 –自定义验证器类

定制验证器扩展了UserNamePasswordValidator类,并覆盖了Validate方法 该验证器在“服务行为”中定义为默认授权管理器,如上面行为部分中所示。 此类将客户端调用接收到的信息与AppsSetting元素中定义的信息进行比较。

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"] &amp;&amp; password == ConfigurationManager.AppSettings["AVeryBigSum_Pass"]))throw new FaultException(string.Format("Wrong username ({0}) or password ", userName));}}
}

为了使此类正常工作,我们需要在项目中添加两个外部库。 我们可以通过右键单击项目-> Manage NuGet Packages,浏览Microsoft.IdentityModel.LoggingMicrosoft.IdentityModel.Tokens软件包并添加两者来完成此操作。

现在我们已经定义了端点,接下来,我们将服务托管在本地开发服务器中。

部署并运行服务

1 –要将我们的服务托管在IIS中,请右键单击该项目,然后转到“ 属性” 。 在属性窗口中,选择“ Web”选项卡。

2-现在在“ Web上的服务器”设置下,您将看到以下详细信息,将“ IIS Express”更改为“ IIS Server”。

3 –现在,单击使用以管理员身份运行的Visual Studio创建虚拟目录。 您将收到一条消息:虚拟目录已成功创建! 否则,您将收到一条错误消息,并且需要以管理员身份再次启动Visual Studio。

现在按F5键,您的应用程序将在IIS服务器而不是IIS express上启动并运行。

结论

在本演示结束时,我们将提供一个由SoapUI调用的安全服务。 我们的下一篇文章将逐步演示如何做到这一点。

另外,可以从GitHub存储库访问该示例; 要下载它,请点击此链接 。

翻译自: https://www.javacodegeeks.com/2020/04/invoking-different-secure-wcf-soap-services-using-soapui-basic-authentication-part-i.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339835.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

配置中文_星球大战:战机中队配置需求公布 支持中文

近日《星球大战》系列新作《星球大战&#xff1a;战机中队》公布&#xff0c;该作采用寒霜引擎打造&#xff0c;支持中文。游戏将于2020年10月3日发售&#xff0c;预购价格为238元&#xff0c;登陆Xbox One/PS4/PC(Steam/Origin/Epic)平台&#xff0c;有单人和多人模式&#xf…

为什么在生产中进行硒自动化测试对于您的下一个版本至关重要?

您是否认为仅仅是因为您的Web应用程序在过渡环境中以鲜艳的色彩通过了&#xff0c;您的生产环境也将是相同的吗&#xff1f; 您可能需要重新考虑&#xff01; 特别是&#xff0c;如果我们指的是跨浏览器测试 &#xff0c;则需要确保跨各种操作系统&#xff0c;运行在不同操作系…

手机usb共享计算机网络连接,如何将手机wifi网络通过USB共享给电脑?小编教你共享方法...

曾经就有过这样的情况&#xff0c;家里突然断网了&#xff0c;这时又需要打开电脑接收文件&#xff0c;或是需要在线编辑公众号的文章&#xff0c;着急得很&#xff0c;这时电脑没有网络怎么办呢&#xff1f;能不能使用手机的流量&#xff0c;来让电脑连网呢&#xff1f;有时候…

为全局变量赋值_实例分析如何远离漫天飞舞的全局变量

前篇《由static来谈谈模块封装》基本实现了对外隐藏属性&#xff0c;隐藏局部模块函数&#xff0c;开放接口的功能。对于这个话题还有些点没有深入探讨&#xff1a;为什么要这样做&#xff1f;以及这样做的好处。或许很多刚刚开始用C或者其他面向对象编程语言(比如C)的小伙伴们…

计算机指令取决,不同的计算机,其指令不同,这主要取决于什么?

不同的计算机&#xff0c;其指令系统也不同&#xff0c;这主要取决于所用的CPU。1、CPU指中央处理器&#xff0c;是一块超大规模的集成电路&#xff0c;是一台计算机的运算核心(Core)和控制核心( Control Unit)。它的功能主要是解释计算机指令以及处理计算机软件中的数据。2、程…

栈空间_Linux中的进程栈和线程栈

1. 进程栈进程栈是属于用户态栈&#xff0c;和进程虚拟地址空间 (Virtual Address Space) 密切相关。那我们先了解下什么是虚拟地址空间&#xff1a;在 32 位机器下&#xff0c;虚拟地址空间大小为 4G。这些虚拟地址通过页表 (Page Table) 映射到物理内存&#xff0c;页表由操作…

csgo显示服务器失败,csgo服务器失败

csgo服务器失败 内容精选换一换您可以通过“应用管理”页面的应用列表&#xff0c;快速查看应用状态&#xff0c;及相关异常信息&#xff0c;如图1所示。包括&#xff1a;应用状态&#xff1a;即图1中的①应用异常信息&#xff1a;即图1中的②云服务器异常信息&#xff1a;即图…

DMN中的函数式编程:感觉就像再次重读我的大学课程一样

在本文中&#xff0c;我想分享有关DMN中的递归支持的有趣见解&#xff0c;并重点介绍FEEL语言的特定属性如何使功能编程结构能够在DMN中建模。 我们将从一个基本的示例开始&#xff0c;以演示FEEL语言和DMN构造的“商业友好”性质如何使我们能够解决一个通常不愉快的问题&…

手游极品飞车无限狂飙链接服务器失败,极品飞车无极限无法联网是什么原因 联网失败原因分析及解决方法...

有些玩家对于极品飞车无极限游戏中无法联网的问题而困扰&#xff0c;应该怎么解决呢&#xff1f;下面42824小小编就把方法分享给大家&#xff01;一、极品飞车无极限游戏无法联网原因及解决方法1、网络连接不稳定推荐在wifi的情况下进行游戏&#xff0c;如果是3G网的话很容易会…

mysql中创建唯一索引的关键字_mysql中唯一索引的关键字是什么

mysql中唯一索引的关键字是unique index。创建唯一索引可以避免数据出现重复。唯一索引可以有多个&#xff0c;但索引列的值必须唯一&#xff0c;索引列的值允许有空值。创建唯一索引可以使用关键字UNIQUE随表一同创建。mysql中唯一索引的关键字是unique index。(推荐教程&…

奇迹觉醒qq服务器比微信少,十年内最大的奇迹!功能比QQ还少的微信为什么能成功?...

今天&#xff0c;微信迎来了自己2021年的第一次「翻车」——2021年1月18日下午2点前后&#xff0c;「由于系统抖动原因」部分微信用户无法及时收取微信消息。截止下午3点19分&#xff0c;故障已被修复。其实微信曾面临过几次信息服务中断的事故&#xff1a;2013年&#xff0c;微…

linux终止mysql进程_Ubuntu Linux下定时监测MySQL进程终止时自动重启的方法

前言最近发现MySQL服务隔三差五就会挂掉&#xff0c;导致我的网站和爬虫都无法正常运作。自己的网站是基于MySQL&#xff0c;在做爬虫存取一些资料的时候也是基于MySQL&#xff0c;数据量一大了&#xff0c;MySQL它就有点受不了了&#xff0c;时不时会崩掉&#xff0c;虽然我自…

线性搜索或顺序搜索算法在Java中如何工作? 示例教程

大家好&#xff0c;我之前谈到了二进制搜索算法的工作原理&#xff0c;并分享了在Java中实现二进制搜索的代码。 在那篇文章中&#xff0c;有人问我是否还存在其他搜索算法&#xff1f; 如果数组中的元素未排序&#xff0c;又如何使用二进制搜索算法&#xff0c;该如何搜索呢&a…

mysql server 5.0安装教程_MySQL Server 5.0安装教程

运行MySQL Server 5.0安装程序“setup.exe”&#xff0c;出现如下界面&#xff1a;安装向导启动&#xff0c;按“Next”继续&#xff1a;选择安装类型&#xff0c;为了方便熟悉安装过程&#xff0c;我们选择“Custom”。按“Next”继续&#xff1a;在“Developer Components”上…

hibernate jpa_JPAHibernate替代方案。 如果JPA或Hibernate对于我的项目而言不够好,该怎么办?...

hibernate jpa你好&#xff01;你好吗&#xff1f; 今天我们将讨论不建议使用JPA / Hibernate的情况。 在JPA领域之外&#xff0c;我们还有哪些选择&#xff1f; 我们将谈论的是&#xff1a; JPA /Hibernate问题 解决一些JPA /Hibernate问题的方法 选择此处描述的框架的标准…

约束流–没有Drools规则语言的现代Java约束

传统上&#xff0c;要使用OptaPlanner进行扩展&#xff0c;您必须学习DRL。 不再。 借助受Java 8 Streams和SQL启发的新Constraints Streams API&#xff0c;您现在可以用Java &#xff08;或Kotlin或Scala&#xff09; 编写约束&#xff0c;并且仍然可以从增量计算中受益。 在…

mysql数据库杀掉堵塞_Mysql解决USE DB堵塞详解

遇到故障&#xff0c;我们往往想的是如何解决这个故障&#xff0c;而不是从故障的根本去思考出现这个故障的原因&#xff1f;这样的结果&#xff0c;只能使我们得到了鱼&#xff0c;失去了渔。今天&#xff0c;我们就来分享一个由USE DB堵塞故障引发的思考案例。故障描述今天一…

java拦截器项目应用_使用拦截器分析Java EE应用程序的性能下降/提高

java拦截器项目应用在开发具有某些性能要求的Java EE应用程序时&#xff0c;必须在每个发行版之前验证是否满足这些要求。 您可能会想到&#xff0c;哈德森的一项工作每天晚上在某些特定的硬件平台上执行一系列测试测量。 您可以检查已实现的时间并将它们与给定的要求进行比较…

iis web.config 配置 经典模式_django部署在iis下,webconfig错误

django部署在iis下&#xff0c;webconfig错误错误原因&#xff1a;iis7以后&#xff0c;web.config管理机制更安全了默认情况下&#xff0c;会锁住配置项&#xff0c;不许修改怎么办&#xff1f;如何求解以上问题呢&#xff1f;D:django_websiteshello>%windir%C:Windows 不…

joo工作流_不要错过使用jOOλ或jOOQ编写Java 8 SQL单行代码的机会

joo工作流越来越多的人通过为他们的业务采用功能性编程来赶上我们平台的最新更新。 在Data Geekery &#xff0c;我们将Java 8用于jOOQ集成测试&#xff0c;因为将新的Streams API与lambda表达式一起使用使生成临时测试数据变得非常容易。 但是&#xff0c; 我们并不认为JDK提…