标签: wcf-security

WCF服务应用程序和WCF服务库之间有什么区别?

我正在开发一个WCF Web服务,我使用WCF服务应用程序模板来做到这一点.

创建"WCF服务应用程序"是否满足此要求?通过WCF服务应用程序创建WCF服务库有什么好处?

wcf wcf-binding wcf-security

118
推荐指数
2
解决办法
4万
查看次数

WCF错误"这可能是因为在HTTPS情况下使用HTTP.SYS未正确配置服务器证书"

我在使用从Windows服务到我的Web服务器上运行的WCF服务的WCF调用时遇到问题.这个电话已经工作了好几个星期,但后来突然停止了工作,此后一直没有工作.

我得到的例外是:

发生常规错误System.ServiceModel.CommunicationException:发出HTTP请求时发生错误

然后它说

这可能是由于在HTTPS情况下未使用HTTP.SYS正确配置服务器证书.这也可能是由客户端和服务器之间的安全绑定不匹配引起的.

我在两端使用的安全性是wsHttpBinding,没有任何加密.它也只是使用HTTP - 而不是HTTPS,所以我不确定它为什么抱怨HTTPS.

内部异常堆栈的其余部分是:

SystemNet.WebException:基础连接已关闭:发送时发生意外错误.---> System.IO.IOException:无法将数据写入传输连接:提供了无效参数.---> System.Net.Sockets.SocketException:在System.Net.Sockets.NetworkStream.MultipleWrite(BufferOffsetSize [])的System.Net.Sockets.Socket.MultipleSend(BufferOffsetSize [] buffers,SocketFlags socketFlags)中提供了无效参数.缓冲区)

我还应该注意到,我的程序中发生这种情况的点是在Web服务调用的"执行"行 - 也就是说,只要我调用Web服务并将其传递给包装的DataContract对象,它炸毁.

所有这些服务正在做的是传递大量的XML(作为.NET对象传递给客户端的调用),然后它做了一些工作.可能正在传输大约100-200k的XML.我已经将两端数据大小的限制提高到超过6兆,但这似乎没有帮助.

有任何想法吗?


有关此问题的更多信息:

当我们在本地复制客户端环境时,我们发现除非我们进行以下更改,否则我们无法上传大量的XML:1.在服务器上,将"maxRequestLength"设置为100 MB(比我们发送的方式更高)2.在客户端,我们将dataContractSerializer标记下的maxItemsInObjectGraph的值设置为"2147483646".

通过这些更改,我们的本地安装成功上传.但是,客户端在其服务器上的安装仍然失败.有趣的是,一旦我们在服务器上更改了maxRequestLength值,我们的测试安装就会开始抛出一个与maxItemsInObjectGraph设置有关的错误.而在我们客户端的服务器上,仍然发生原始的"HTTP.sys"错误.

正如我之前提到的,我们根本没有使用SSL,还有2个其他Web服务调用以相同的方式执行和上传XML.但是,由于非工作服务呼叫传输更多数据,这似乎是一个大小问题.

但是,如果客户端遇到的问题与我们的测试安装相同,我不明白为什么客户端错误消息与ObjectGraph错误无关.

是否有可能我们只是为客户端上的每个可能的错误获取通用的"无效参数""HTTP.sys"错误(即它真的得到了objectGraph错误,但只是没有显示它?)

xml wcf web-services wcf-security

70
推荐指数
8
解决办法
14万
查看次数

正确的方式为SOAP Web服务传递WSSE Usernametoken

我试图通过其相应的wsdl使用Web服务.此服务依赖于符合Web服务安全基本安全配置文件1.0的身份验证,包括http://docs.oasis-open.org/wss/2004/01/oasis-200401wss-wssecurity-secext-1.0的正确xmls命名空间. xsd必须包含在请求中.

例:

<wsse:UsernameToken xmlns:wsse='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' >
   <wsse:Username>
      Bob
   </wsse:Username>
   <wsse:Password Type='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText'>
      1234
   </wsse:Password>
</wsse:UsernameToken>
Run Code Online (Sandbox Code Playgroud)

我的第一次尝试是Add Service Reference针对wsdl以及使用它们生成的代理

ServicePointManager.ServerCertificateValidationCallback = 
    (object s, X509Certificate certificate, X509Chain chain,
                     SslPolicyErrors sslPolicyErrors) => true;

var basicHttpBinding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
basicHttpBinding.Security.Transport.ClientCredentialType = 
                                                HttpClientCredentialType.Basic;

var endpoint = new EndpointAddress("https://secure-ausomxana.crmondemand.com/..."

using (var client = new ContactClient(basicHttpBinding, endpoint))
{

    var credential = client.ClientCredentials.UserName;
    credential.UserName = "bob";
    credential.Password = "1234";

    var input = ...    
    var output = client.ContactQueryPage(input);
}
Run Code Online (Sandbox Code Playgroud)

但是,尝试使用Fiddler查询SOAP消息时,我发现没有添加任何UsernameToken元素.

履行这份合同的正确方法是什么?

编辑: …

c# wcf ws-security visual-studio-2010 wcf-security

55
推荐指数
2
解决办法
8万
查看次数

是否可以在没有SDK的情况下调用Dynamics CRM 2011后期绑定WCF组织服务 - 直接自定义绑定?

我正在尝试实现一个纯WCF场景,我想在不依赖SDK帮助程序类的情况下调用Dynamics CRM WCF服务.基本上,我想使用.net框架中的本机WCF支持对Dynamics CRM 2011实施联合身份验证.

我这样做的原因是我想稍后将这个场景移植到BizTalk上.

我已成功使用SvcUtil生成代理类,但部分策略和安全性断言与配置架构不兼容.SvcUtil建议从代码构建绑定,这正是我想要做的.

结果代码在这里:

        private static void CallWcf()
    {
        OrganizationServiceClient client = null;

        try
        {
            // Login Live.com Issuer Binding

            var wsHttpBinding = new WSHttpBinding();
            wsHttpBinding.Security = new WSHttpSecurity();
            wsHttpBinding.Security.Mode = SecurityMode.Transport;

            // Endpoint Binding Elements

            var securityElement = new TransportSecurityBindingElement();
            securityElement.DefaultAlgorithmSuite = SecurityAlgorithmSuite.TripleDes;
            securityElement.IncludeTimestamp = true;
            securityElement.KeyEntropyMode = SecurityKeyEntropyMode.CombinedEntropy;
            securityElement.MessageSecurityVersion = MessageSecurityVersion.WSSecurity11WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10;
            securityElement.SecurityHeaderLayout = SecurityHeaderLayout.Strict;

            var securityTokenParameters = new IssuedSecurityTokenParameters();
            securityTokenParameters.InclusionMode = SecurityTokenInclusionMode.AlwaysToRecipient;
            securityTokenParameters.ReferenceStyle = SecurityTokenReferenceStyle.Internal;
            securityTokenParameters.RequireDerivedKeys = false;
            securityTokenParameters.TokenType = …
Run Code Online (Sandbox Code Playgroud)

c# wcf wcf-client wcf-security dynamics-crm-2011

50
推荐指数
1
解决办法
2610
查看次数

WCF传输与消息

我正在阅读有关WCF安全实现的内容,并发现有两种类型的安全性: Transport Mode and Message Mode (or both)

如果我使用HTTPS进行传输模式,如果我也使用Message安全性,它会更安全吗?我问这个,因为我的理解如下:

https使用加密消息的SSL协议......那么我为什么要添加Message Security并加密SSL加密消息?还是我误解了什么?

c# wcf wcf-security

48
推荐指数
2
解决办法
2万
查看次数

使用Fiddler嗅探Visual Studio 2013请求(代理防火墙)

我遇到Visual Studio 2013和我们的公司代理问题(登录不起作用,更新不起作用,Visual Studio库不起作用,nuget和git失败).所有这些都在做http或https请求.(例如http://visualstudiogallery.msdn.microsoft.com/).在VS2013中,我只是获得了旋转进度条或没有网络连接的消息.

浏览器(chrome,IE,firefox)没问题,因为他们都理解代理(407拒绝,然后用凭据回复).

所以我想弄明白为什么VS2013不起作用.但是当我告诉fiddler2观看DEVENV.EXE进程(或所有进程)时,我看不到任何流量.

顺便说一下,我已经尝试对web.config(devenv.exe.config)文件进行一些更改,以确保它转到代理(我在堆栈生成器中看到了这个),但它对我不起作用.请参阅以下部分的补充内容:

    <system.net>
                <defaultProxy useDefaultCredentials="true" enabled="true">
                 <proxy proxyaddress="http://gw6.OURSITE.com:3128" />
                </defaultProxy>
      <settings>
        <ipv6 enabled="true"/>
        <servicePointManager expect100Continue="false" />
       </settings>
    </system.net>
Run Code Online (Sandbox Code Playgroud)

更新

埃里克,我接受了你的建议并把它塞进C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe.config文件中.

我放的是:

  <system.net>
    <defaultProxy useDefaultCredentials="true" enabled="true">
      <proxy autoDetect="false" bypassonlocal="false" proxyaddress="http://127.0.0.1:8888" usesystemdefault="false" />
    </defaultProxy>
  </system.net>
Run Code Online (Sandbox Code Playgroud)

我发现VS2013没有发送用户代理字符串.它确实知道#407 naks并且它使用凭据进行回复,但网关仍然需要用户代理:

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: text/html; charset=utf-8
Proxy-Connection: close
Connection: close
Content-Length: 1341

<html>
    <head>
        <title>Access Policy Denied: No User-Agent Specified</title>
        <meta name="description" content="Web Access Policy">
    </head>
    <body>
Run Code Online (Sandbox Code Playgroud)

proxy ntlm fiddler wcf-security visual-studio

46
推荐指数
3
解决办法
4万
查看次数

安全模式="传输"和安全模式="TransportCredentialOnly"之间有什么区别?

之间有什么区别security mode="Transport"security mode="TransportCredentialOnly"当我使用它BasicHttpBinding在ISS 7.0和安装SSL?

wcf wcf-security

31
推荐指数
2
解决办法
4万
查看次数

WCFTestClient - 如何添加用户名和通过?

我正在使用WCFTestClient来调试服务.这通常像魅力一样.此特定服务使用SSL,我需要传递用户名和密码.我可以右键单击并编辑配置文件,但是我没有看到可以注入用户名和密码的地方.在此服务的普通客户端应用程序上,我们以编程方式设置凭据,如何使用工具WCFTEstClient或ServiceConfigurationEditor执行此操作.那里的任何人都知道如何做到这一点?这是我在代码中的表现.

_client.ClientCredentials.UserName.UserName = ConfigurationManager.AppSettings["name"];
_client.ClientCredentials.UserName.Password = ConfigurationManager.AppSettings["pass"];
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.
干杯,
〜在圣地亚哥

security service wcf wcf-security

29
推荐指数
1
解决办法
2万
查看次数

WCF安全 - 我不明白的列表

关于WCF和安全问题我正在四处走动,所以我只想在这里提出一大堆问题,希望有人能帮助我获得清晰的图片.

  1. 有人可以给我一个关于传输与消息级安全性的简单英文解释.

  2. 我有一个在SSL下运行的服务,它将根据用户的Windows凭据对用户进行身份验证.我也我知道如何限制访问通过一个的PrincipalPermission服务方法.但是我如何实际检索当前的IPrinciple,所以我可以根据谁调用服务返回不同的结果?

  3. 我已经找到了如何打开跟踪,我可以使用"Microsoft服务跟踪日志查看器"查看我的跟踪日志,但如果我能弄清楚我正在显示什么,那就太糟糕了.有没有一个很好的资源解释如何使用这个东西?

  4. 使用"证书"clientCredentialType时,这与SSL有什么不同?

  5. 使用"Windows"clientCredentialType时,如何查看正在通过的Windows用户?

  6. 我的要求意味着我必须使用basicHttpBindings - 我在假设中是正确的:

    • 我只提供运输级别的安全性吗?
    • 我无法为此绑定实现自定义用户名/密码?

我知道这些问题可能看起来很愚蠢,但任何有关澄清的帮助都会有所帮助.

编辑:

  1. 如何以类似于.asmx服务的方式向我的服务添加自定义SOAP标头?这是一种有效的方法吗?

编辑:

除了上述问题之外,我想知道是否可以通过检查Active Directory来验证基于Windows用户的Windows移动设备.对于迄今为止我发现的所有内容,似乎不太可能.

注意:对于那些不知道Windows CE版本的WCF可用的人:仅限传输级别安全性,以及客户端凭据类型的无/证书.所以看来CE的WCF默认不允许这样做,但是我可以安全地在消息中发送这些信息(通过方法签名),这是否是一种可接受的方式来发送这种信息?

asp.net security wcf web-services wcf-security

24
推荐指数
1
解决办法
1825
查看次数

使用Web场环境中的共享缓存来检测WCF中的重放攻击

我试图弄清楚如何在Web场方案中使用WCF实现重放攻击检测机制.

WCF通过使用nonce缓存提供这种检测机制.如果我错了,请纠正我,但确保在邮件安全和Web场方案中防止此攻击的唯一方法是使用跨服务器共享的nonce缓存.

在WSE3.0中,过去可以提供nonce缓存自定义实现

http://msdn.microsoft.com/en-us/library/ff647945.aspx

但是在WCF中似乎没有任何方法可以这样做(没有配置选项,除了我在Reflector中发现NonceCache类被标记为密封和内部..)

有什么想法吗?

security wcf wcf-security

24
推荐指数
1
解决办法
737
查看次数