使用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,一经查实,立即删除!

相关文章

计算机动画分为关键帧动画和,一个最简单的动画最少有几个关键帧

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。一个最简单的动画至少有两个关键帧&#xff0c;两个关键帧中必须是元件&#xff0c;而且必须是同一个元件。要创建使组合体或文字发生颜色渐变的动画&#xff0c;必须先将它们转换为…

python+robotframework_python+robot framework接口自动化测试

转载&#xff1a;http://www.cnblogs.com/nzg-noway/p/6651957.htmlpythonrequests实现接口的请求前篇已经介绍&#xff0c;还有不懂或者疑问的可以访问目前我们需要考虑的是如何实现关键字驱动实现接口自动化输出&#xff0c;通过关键字的封装实现一定意义上的脚本与用例的脱离…

自动装箱和拆箱_自动装箱

自动装箱和拆箱自Java 1.5以来&#xff0c;所有Java开发人员都可以使用自动装箱功能。嗯&#xff0c;我可能太乐观了。 至少所有开发人员都应该可以使用自动装箱。 毕竟&#xff0c;在ORACLE页面上有一个很好的教程。 自动装箱是指Java编译器在需要时自动从原始类型创建用于创…

计算机网络标准体系,计算机网络标准体系结构实验报告.doc

华北电力大学实 验 报 告||试验名称 计算机网络体系结构试验课程名称 计算机网络体系结构||专业班级&#xff1a;网络1202 学生姓名&#xff1a;学 号&#xff1a; 成 绩&#xff1a;指导老师&#xff1a;李丽芬 试验日期&#xff1a;.12.18一、试验目标和要求1&#xff0e;将网…

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

近日《星球大战》系列新作《星球大战&#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)的小伙伴们…

数据库班级字段怎么定义名称_班级名称

数据库班级字段怎么定义名称在Java中&#xff0c;每个类都有一个名称。 类位于包中&#xff0c;这使我们程序员可以一起工作&#xff0c;避免名称冲突。 我可以命名我的班级A &#xff0c;也可以命名您的班级A &#xff0c;只要它们位于不同的程序包中&#xff0c;它们可以很好…

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

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

python内存管理方法_Python 内存管理大揭秘

前言语言的内存管理是语言设计的一个重要方面。它是决定语言性能的重要因素。无论是C语言的手工管理&#xff0c;还是Java的垃圾回收&#xff0c;都成为语言最重要的特征。这里以Python语言为例子&#xff0c;说明一门动态类型的、面向对象的语言的内存管理方式。对象的内存使用…

Kubernetes集群上的Apache Ignite和Spring第1部分:Spring Boot应用程序

在之前的一系列博客中&#xff0c;我们在Kubernetes集群上启动了一个Ignite集群。 在本教程中&#xff0c;我们将使用先前在Spring Boot Application上创建的Ignite集群。 让我们使用Spring Boot创建我们的项目。 Spring Boot应用程序将连接到Ignite集群。 让我们添加依赖项…

计算机VB整除,【原创】VB中的整除运算和转换函数

前言&#xff1a;【关于四舍五入】——实际上是相对小数部分<0.5 舍&#xff1b;0.5 看整数部分&#xff0c;若为奇数则进&#xff0c;若为偶数则舍&#xff1b;>0.5 进整除运算“\”作用&#xff1a;用于对两个数进行除法运算并返回一个整数例如&#xff1a;18\53 …

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

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

mockito_Mockito 101

mockitoMockito是一个模拟框架&#xff0c;可让您使用简洁的API编写漂亮的测试。 它偏向于最小的规格&#xff0c;使不同的行为看起来有所不同&#xff0c;并显示清晰的错误消息。 创造嘲弄 要使用Mockito创建模拟&#xff0c;只需使用Mock注释模拟&#xff0c;然后调用Mockit…

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

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

mysql多表成绩查询_MySQL多表数据记录查询(一)

1&#xff0e;交叉连接SQL语句的语法结构如下&#xff1a;select * from表1 cross join 表2;或Select * from表1&#xff0c;表2;2.内连接SQL语句有两种表示形式&#xff1a;使用inner join 语法结构如下&#xff1a;Select表达式1&#xff0c;表达式2&#xff0c;...&#xff…

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

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

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

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

mysql索引命名规范_mysql使用规范-索引规范

(1)单张表中索引数量不超过5个。(2)单个索引中的字段数不超过5个。(3)索引名必须全部使用小写。(4)非唯一索引按照“idx_字段名称[_字段名称]”进用行命名。例如idx_age_name。(5)唯一索引按照“uniq_字段名称[_字段名称]”进用行命名。例如uniq_age_name。(6)组合索引建议包含…