Tag: ws security

使用UserNameOverTransport绑定时,如何让WCF以摘要模式发送密码? (将WSE3.0代码转换为WCF)

我正在尝试将此WSE3.0代码转换为WCF: // we use Microsoft WSE 3.0 to insert the username token in the soap header. // This strategy takes care of creating and inserting the Nonce and Created elements // for us, as well as creating a password digest based on Nonce, Created, and // the password itself. Refer to the WS-Secutiry UsernameToken Profile […]

将标头添加到WCF RequestSecurityToken消息

我正在尝试设置将使用WSHttpBinding进行通信的客户端(Web应用程序)和服务(WCF服务)。 看来为了使用这种绑定,客户端发送初步消息来设置频道。 在客户端和服务之间存在一个服务总线,它在自定义头上进行路由。 使用BasicHttpBinding安全性时,该消息没有问题。 我的问题是:有没有办法在初步的RequestSecurityToken消息中添加相同的自定义标头? 先感谢您。

WCF – 实现需要加密一个soap:body元素的客户端,怎么做?

我一直在寻找这一点,到目前为止它看起来并不乐观,试图编写一个消耗第三方服务的客户端应用程序(下面的示例请求,来自Java客户端)。 一个问题是它期望身体中的一个元素被加密。 理想情况下,这将是一个WCF解决方案,虽然我已经阅读了一些关于使用WSE1 / 2/3接近这一点的地方(因为WSE停滞不是真的很想),有没有人必须解决这类问题? 2010-11-23T16:17:36Z 痛点是soap:Body中的authPwd元素,感谢任何见解

WebServicesClientProtocol在安全标头中将EncodingType添加到Nonce

类似的问题: 如何在WSE 3.0(.NET)中的UsernameToken的Nonce元素中添加EncodingType属性 我正在尝试修改由WebServicesClientProtocol发送到服务的标头。 不幸的是,Microsoft的WSSE Username and Token Security Spec 1.1的实现与标准不兼容,并且没有使用Nonce发送EncodingType 。 在类似的问题我已经链接在顶部解决方案是禁用服务器上的EncodingTypevalidation,但我无法修改任何东西。 我已经将WSDL导入为Web Reference,我已将基类更改为WebServicesClientProtocol 然后在我的代码里面我这样做: var client = new QueryClient(); SoapContext requestContext = client.RequestSoapContext; requestContext.Security.Timestamp.TtlInSeconds = 60; var userToken = new UsernameToken(_userName, _password, PasswordOption.SendHashed); requestContext.Security.Tokens.Add(userToken); X509SecurityToken signatureToken = GetSecurityToken(); requestContext.Security.Tokens.Add(signatureToken); MessageSignature sig = new MessageSignature(signatureToken); requestContext.Security.Elements.Add(sig); client.SetClientCredential(signatureToken); client.SetClientCredential(new UsernameToken(_userName, _password, PasswordOption.SendHashed)); 这创建了几乎理想的请求,但Nonce没有得到EncodingType : ws_test_user […]

使用C#将签名的SOAP消息创建为字符串

我需要调用Web服务,我必须使用C#发送下面的肥皂请求。 必须签署SoapBody和TimeStamp。 MIIFsDCCBawwggSUoAMCAQICBgCaWhnEajANBgkqhkiG9w0BAQsFADBcMQswCQYDVQQGEwJUUjFNMEsGA1UEAwxETWFsaSBNw7xow7xyIEVsZWt0cm9uaWsgU2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLEgLSBTw7xyw7xtIDEwHhcNMT IZVrIpPCxiPcvyVOVv/d4nRPZWM= fltghgDztDtuVQX7y4t0ZJxAnxE= IOVXxBTp053aNJMbQj+VTiBblZ63peyJ1vWazKmEWNxN7RaeFfKELoxede8xQEqzSaB/u8exC7LLGYiEdChboVCf9liLMN4MmNj5JR6gfDrsL3azThf5hxLQ+WIE20PRoU6ozpp20zC1IaO3IU4ZaRLw 2014-12-08T21:26:36.191Z 2014-12-08T21:36:36.191Z 1234567 我创建了这个soap请求并通过使用带有私钥的证书的WCF客户端CustomBinding和.pfx文件获得了良好的响应。 有关签署soap消息的大多数示例都使用证书存储或pfx文件中的证书。 但在我的方案中,用户的证书(带有私钥)存储在智能卡上,无法导出证书私钥。 所以在这种情况下我不能使用WCF CustomBinding或者我不能使用SignedXml类来签署SOAP消息,因为当我尝试以编程方式获取证书时,则缺少私钥。 (此外,我通过使用NCryptoki – PKCS包装器获得了私钥,但是此私钥类型与RSA不同,我无法为WCF客户端或SignedXmlClass私钥设置。) 因此,我尝试将此SOAP消息创建为字符串,并使用智能卡手动创建DigestValues,BinarySecurityToken和SignatureValue。 我可以将BinarySecurityToken值计算为: var certificate = GetX5092Certificate(); // X5092 certificate on smart card without private key string binarySecToken= Convert.ToBase64String(certificate.RawData); 我也有一些代码来计算摘要值: byte[] dataToHashTS = Encoding.UTF8.GetBytes(TimeStampReference.OuterXml); XmlDsigExcC14NTransform transformDataTS = new XmlDsigExcC14NTransform(“wsse soap web”); transformDataTS.LoadInput(new MemoryStream(dataToHashTS)); byte[] bDigestDataTS = transformDataTS.GetDigestedOutput(SHA1Managed.Create()); string sDigestDataTS […]

添加SOAP:使用WSE 3.0的HEADER用户名和密码

我已经成功创建了一个在不使用身份validation时正常工作的WS客户端。 但是,服务器(WebSphere)现在需要添加一个ws-security用户名令牌,而我很难做到这一点。 生成的SOAP消息应该看起来像这样: foo bar foooooobar== 2010-01-25T13:09:24.860Z … 我已下载并安装了Microsoft的WSE 3.0 SDK,并在我的Visual Studio 2005项目中添加了对DLL的引用。 我现在可以访问Microsoft.Web.Services3。*命名空间,但我目前难以理解如何继续。 客户端代码是由Web引用自动生成的,因此我只做了少量工作就将消息发送到未经身份validation的服务器: WS.FooResultHttpService ws = new WS.FooResultHttpService(); ws.Url = “http://foo.bar.baz”; ws.SendSomething(message); 我刚刚开始使用Microsoft.Web.Services3.Security.Tokens.UsernameTokenManager进行调查,但到目前为止我还没有能够获得任何启动和运行。 任何提示将不胜感激,因为我似乎无法在网上找到任何好的食谱。 谢谢!

使用SOAP请求中的自定义字段实现WSSE安全标头时出现C#运行时错误

我正在尝试将SOAP请求发送到使用WSSE和UsernameToken进行身份validation的Web服务。 示例查询如下(屏蔽机密数据): abc 123 12345678901 我使用WSE 3.0生成了一个代理类,问题是我收到错误:“对象引用没有设置为对象的实例。” 我的C#代码中有问题的部分如下: queryNoSorguType q = new queryNoSorguType(); string query_parameter = query_no; q.queryNo = query_parameter; ResultType[] r = new ResultType[10]; UsernameToken token = new UsernameToken(“abc”, “123”,PasswordOption.SendPlainText); //mWebService.SetClientCredential(token); //Policy webServiceClientPolicy = new Policy(); mWebService.RequestSoapContext.Security.Tokens.Add(token); //mWebService.SetPolicy(webServiceClientPolicy); //r = mWebService.documentQuerybyQueryNo(q); System.Data.DataTable outputDataTable = new System.Data.DataTable(); //System.Data.DataRow outRow = outputDataTable.Rows.Add(); //outRow[“field1”] = r; output […]

WS-Security中PasswordDigest的工作算法

我遇到了WS-Security的问题,并创建了一个正确的随机数和密码摘要。 我成功使用SoapUI将数据发送到Oracle系统。 所以我能够拦截SoapUI的调用(将代理更改为127.0.0.1端口8888以使用Fiddler失败,因为它是通过SSL) – 拦截非常重要,因为这些值只能使用一次。 然后我可以获取nonce,创建时间戳和密码摘要将它们放入我的代码中(我只有30秒的时间来执行此操作,因为值不会持续!)并且我获得了成功。 所以我知道它不是别的 – 只是密码摘要。 我使用的值如下: Nonce: UIYifr1SPoNlrmmKGSVOug== Created Timestamp: 2009-12-03T16:14:49Z Password: test8 Required Password Digest: yf2yatQzoaNaC8BflCMatVch/B8= 我知道创建摘要的算法是: Password_Digest = Base64 ( SHA-1 ( nonce + created + password ) ) 使用以下代码(来自Rick Strahl的post ) protected string GetSHA1String(string phrase) { SHA1CryptoServiceProvider sha1Hasher = new SHA1CryptoServiceProvider(); byte[] hashedDataBytes = sha1Hasher.ComputeHash(Encoding.UTF8.GetBytes(phrase)); return Convert.ToBase64String(hashedDataBytes); } […]

使用.NET中的WS安全性调用Web服务

我需要使用ASP.NET中的WS-Security保护的Web服务。 我正在使用SoapUI测试服务,作为信封请求: ? ? ? ? ? 我得到的回应是: env:Server org.jboss.ws.core.CommonSOAPFaultException: This service requires <wsse:Security>, which is missing. 所以我联系了服务提供商,他们告诉我,必须使用WS-Security来调用服务。 因此,发送到服务器的SOAP消息必须使用我的证书进行数字签名。 问题是我不知道该怎么做。 到目前为止,我添加了一个服务参考,我在代码中传递了提到的证书: var srvRef = new DnaSoapClient(); srvRef.ClientCredentials.ClientCertificate.Certificate = theCert; var response = srvRef.agregarManifiesto( dnaManifiesto ); 我google了一些,有些人推荐WCF。 我正在构建一个ASP.NET 4.5应用程序。 这个场景有什么选择? 我需要知道如何使用我的证书签署邮件。 编辑1:我能够推进这个问题,现在我可以发送用证书签名的SOAP消息,我即将结束我的任务。 现在我无法在安全标签中设置正确的元素,我编辑了问题以显示信封,正确的信封和我的信封。 正确:这是正确请求的样本信封 MIIC9TCCAd2gAwIBAgIIUiM4nWs8kfcwDQYJKoZIhvcNAQEFBQAwNzERMA8GA1UEAwwIQWRtaW5DQTExFTATBgNVBAoMDEVKQkNBIFNhbXBsZTELMAkGA1UEBhMCU0UwHhcNMTQwMzIwMTkxMTIwWhcNMTgxMjIwMTQzNzEzWjBBMRQwEgYDVQQDDAtjb3VyaWVyLnRudDEOMAwGA1UECwwFc29maWExDDAKBgNVBAoMA2RuYTELMAkGA1UEBhMCcHkwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOS71x5+ChwGzWs4VlLgkePbU8/zFHUrrE8nFNVsukMCc5q5hCK8/CeNM+mxImilLdJrGoC2/000lQetB9B3AqIrAdOfBFU4/qsAlgWI+kt2jnUsJMLRjQfxhAKMeX4RUb0CmTcsnXtWlFvYFFjiUi9nUJVSxCsmldVFgLIAHRPjAgMBAAGjfzB9MB0GA1UdDgQWBBTCwBBmU7f/4SmNz7GNJ25ILkPuhjAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaAFDF+1hOSdgg2DFOUofnnXdx9TxjeMA4GA1UdDwEB/wQEAwIE8DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADggEBAALVVGGNsTSMcfDBwkkNQH3MpfiNTo/mhH8ahqUVN1+5BIwWstv8fH0Sl9ea1XShKLPDfDIx8WSzUUIt/93f74B3a3oMpBtbVEiku2BKUp5cJfkYe2c5zPOxk3nzmQwcEoB++RgX9DJOtUkKA/It2IM9/8ggUyjceJQCpBRiA9Kg7+h3HfmOKNn+9/pNu498JXhSRKa8Jr4pp/1udYRk+W8sKGEBtAU9MvL3y0AbvLhUD+MZyvpHGB17fslC8Nnd5EBQH8hQD+DWGepyCBIlb0NA13YEoLMcRKDcWvSPd0UGWo2G0IOeUZaGuzzIz2n04QrXvnqQKAOFd9yH2VfGtWE= whvAdAkypsWVXHXbIz/T54n0dBw= MdHy5mceNtQWUD5WmVOzZU8roxD3EQkQmcZA9LsfhBcp3cFAD3P1qJJ9EyrRFBs5yCiYDY716Wzh M+tFybt1+EujXZZ3ytk4XaahkexNAG51iup1wvw0Km+nsj4u/x8DzTA/J9EG3ZdTSUrIVBsFcEQa TF4BwUAgGBS87xqL5zc= 2014-05-13T19:06:00.188Z 2014-05-13T19:07:00.188Z 我的,这不行 uIDPowmum40QT95GqsY7XPKT7LIAAAAAvMwgorinWU+AVOWH+3TPjP6NBU03AZtHqle8GLRYcYAACQAA 2014-05-15T21:30:20.723Z 2014-05-15T21:35:20.723Z MIIC9jCCAd6gAwIBAgIINNZyZplkQHgwDQYJKoZIhvcNAQEFBQAwNzERMA8GA1UEAwwIQWRtaW5DQTExFTATBgNVBAoMDEVKQkNBIFNhbXBsZTELMAkGA1UEBhMCU0UwHhcNMTQwMzIwMTgzMjQ3WhcNMTgxMjIwMTQzNzEzWjBCMRUwEwYDVQQDDAxjb3Vycmllci5kaGwxDDAKBgNVBAsMA09QUzEOMAwGA1UECgwFREhMUFkxCzAJBgNVBAYTAlBZMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCGoP0dxByIfto/hqJCOhobTdwQJ3AxJkqUeSNFnprAH8zi6HjBJhzkXptqXiR9GZR1H4U3UaN6aczKVh2PaPqU8ooTxjST0ywWBgXA1WP3ukrybUKxpSvqmiRJ/cANAYLovL+gmh2v/fqPiLs7vsgT+zj1330wRGqtrokYPMjlbQIDAQABo38wfTAdBgNVHQ4EFgQU6IHB4XfP7+rbryy1Ru8kFcfSDqcwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBQxftYTknYINgxTlKH5513cfU8Y3jAOBgNVHQ8BAf8EBAMCBPAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA0GCSqGSIb3DQEBBQUAA4IBAQB3NQC+0/VmC7A1MStKdc2NctTo7P+mhvIBe54U/Vs8I5vXiatKz01BzHIbl7chjP063V4YTtehDCGkwUTtARqpkua7RfdlMqsmcr1s3qnD4lUpGuAeVW0Wsrhu1xGjPf02fTBdD3yyGWCeUiNvKuoweeATlGyB/VlHJaZHN4HuJCnWlPic6uUUMBYqrOOa+wJr/OCFHqkEiBsUihD6ergj7AeAAFcG41GI2ZjVWK/PEB71sbQqqGgLpigAS9f8PNMm+TnQuizrvLPKm3hanOKYr9ORrbWjZCL3dva1YobK4ykvUYpncj6YsOtuDi62RcHYjT7IF9UoeZHBE2vePc+K […]

如何在C#中使用WS-Security?

如何在C#中创建一个Web服务,使用WS-Security进行加密和双方签名(请求和响应)? 客户端和服务器将使用证书。