为Windows Forms应用程序与IIS托pipe的RESTful WCF服务交谈实施授权/身份validation的最佳方法是什么? 我问的原因是我很困惑,筛选了不同的文章和职位expression不同的方法,并最终在WCF安全最佳实践“( http://www.codeplex.com/WCFSecurityGuide )上达到约650页的文档我是根据我的情况,只是不确定哪种方法是最好的,以及如何开始实施。 我从本文开始使用“使用WCF 3.5devise和构buildREST风格的Web服务”( http://msdn.microsoft.com/zh-cn/library/dd203052.aspx )以及REST风格的WCF服务上的PDCvideo。很棒,帮助我实现了我的第一个REST友好的WCF服务, 我有了服务工作后,我回到了实施安全,见。 “安全注意事项”(页面上的四分之一),并试图按照说明实现一个HTTP授权标头,但是我发现代码是不完整的(请参阅UserKeysvariables从未声明)。 这是我试图研究更多关于如何做到这一点(使用HMAC哈希与“授权”HTTP标头,但在谷歌上找不到多less?),这导致我到其他文章有关消息级别的安全性,形成authentication和自定义validation器,坦率地说,我不确定哪个是现在采取的最好和最合适的方法。 所以所有这些(并感谢听到直到现在!),我想我的主要问题是, – 我应该使用哪种安全实施? – 有没有办法避免每个WCF调用发送用户名/密码? 如果在开始时已经build立了一个连接,我宁愿不发送这些额外的字节,这将在login之后允许进行后续的呼叫。 – 如果我使用SSL,是否真的应该关心纯文本? 如上所述,.NET 3.5 win表单应用程序,IIS托pipe的WCF服务,但是重要的是我希望任何和所有的WCF服务都需要这个授权过程(不过它应该是会话,http头或其他),因为我不希望任何人都能够从networking上获得这些服务。 我知道上面的post很大,但我不得不expression我已经倒闭的路线,我需要完成的任何和所有的帮助,我非常感激。 PS:我也知道这篇文章如何使用WCF使用用户名/密码+ SSLconfiguration安全的REST风格的服务,如果社区build议我离开REST的WCF服务,我可以做到这一点,但是我开始保持一致任何公共的API来。 我认为这是很重要的,我说我如何访问我的WCF服务(联系服务正在工作,但什么是validation凭据 – 然后返回成员对象的最佳方式? WebChannelFactory<IMemberService> cf = new WebChannelFactory<IMemberService>( new Uri(Properties.Settings.Default.MemberServiceEndpoint)); IMemberService channel = cf.CreateChannel(); Member m = channel.GetMember("user", "pass"); 从MS文章(和我自己的一些testing)实施的一半代码: public Member GetMember(string username, string password) { if […]
我试图创build类似于:客户端authentication并从自定义STS1获取令牌,下一个客户端使用机器密钥授权,并在自定义STS2上发出令牌,并获得另一个令牌。 用最后一个令牌,客户端请求RP服务的方法。 所有服务均在IIS上进行托pipe,并使用主动联合scheme。 两个STS的terminal都使用ws2007Federation和ws2007Http绑定,RP使用ws2007FederationBinding作为发行者。 如果我用CreateChannelWithIssuedToken创build通道,我只能看到来自STS1的令牌,不能从STS2获取令牌。 所以我决定把STS1的令牌作为ActA RST的属性传给STS2令牌。 那失败了 – 不能解密令牌。 我怎样才能将这两个标记传递给STS2并将它们合并起来? 是不是一个好主意 – 用RST发送刚刚从STS1令牌提取的声明?
我试图通过相应的wsdl来使用Web服务。 此服务依赖于符合Web服务安全基本安全configuration文件1.0的身份validation,包括http://docs.oasis-open.org/wss/2004/01/oasis-200401wss-wssecurity-secext-1.0的正确xml名称空间。 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> 我的第一次尝试是沿着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; […]