对于与IIS托管的RESTful WCF服务进行通信的Windows窗体应用程序,实现授权/身份验证的最佳方法是什么?
我问的原因是我非常困惑,在筛选出不同的文章和帖子后表达了不同的方法并最终在WCF安全最佳实践中找到了约650页的文档"(http://www.codeplex.com/WCFSecurityGuide)我是根据我的情况,我不确定哪种方法最好采取以及如何开始实施.
我从这篇文章"使用WCF 3.5设计和构建RESTful Web服务指南"(http://msdn.microsoft.com/en-us/library/dd203052.aspx)和RESTful WCF服务的PDC视频开始很棒,帮助我实现了我的第一个REST友好的WCF服务,
在我使用该服务后,我返回实施安全性,请参阅."安全注意事项"(页面下方四分之一)并尝试按照说明实现HTTP Authorization标头,但是我发现代码不完整(请参阅"UserKeys"变量从未声明的方式).这是我试图研究如何做到这一点的更多点(使用带有"授权"HTTP标头的HMAC哈希,但在谷歌上找不到多少?)它引导我阅读有关消息级安全性的其他文章,形成auth和自定义验证器,坦率地说,我不确定哪种方法最好,最合适.
所以说了这些(感谢听到现在!),我想我的主要问题是,
- 我应该使用哪种安全实施方案?
- 有没有办法避免每次WCF呼叫都发送用户名/密码?如果在开始时建立了连接,我宁愿不发送这些额外的字节,这将是在登录后允许进行后续调用之前.
- 如果我使用SSL,我是否真的应该关注除纯文本以外的任何内容?
如上所述,.NET 3.5 win表单应用程序,IIS托管的WCF服务,但重要的是我希望任何和所有WCF服务都需要此授权程序(但它应该是,session,http header或其他),因为我不希望任何人能够从网上获得这些服务.
我知道上面的帖子很大但是我必须表达我已经失败的路线以及我需要完成的任务,我们非常感谢所有的帮助.
PS:我也知道这篇文章如何使用用户名/密码+ SSL配置WCF的安全REST服务,如果社区建议我从REST转移到WCF服务,我可以这样做,但是我开始这样做以保持一致性任何公共API来.
我认为重要的是我说明了我如何访问我的WCF服务(联系服务正在运行,但验证凭据的最佳方法是什么 - 然后返回Member对象?):
WebChannelFactory<IMemberService> cf = new WebChannelFactory<IMemberService>(
new Uri(Properties.Settings.Default.MemberServiceEndpoint));
IMemberService channel = cf.CreateChannel();
Member m = channel.GetMember("user", "pass");
Run Code Online (Sandbox Code Playgroud)
代码是MS文章中的一半(以及我自己的一些用于测试):
public Member GetMember(string username, string password)
{
if (string.IsNullOrEmpty(username))
throw new WebProtocolException(HttpStatusCode.BadRequest, "Username must be provided.", null);
if (string.IsNullOrEmpty(password))
throw new WebProtocolException(HttpStatusCode.BadRequest, "Password must be provided.", null);
if (!AuthenticateMember(username))
{
WebOperationContext.Current.OutgoingResponse.StatusCode …Run Code Online (Sandbox Code Playgroud) 对于企业类型的WCF服务,可能有10K的数千个客户端将对中央服务器进行身份验证和发送数据,在会话或身份验证方面,什么是"最佳"实践?
我的场景是一个3层应用程序,其中数据层是SQL Server数据库,中间层是Windows服务中托管的WCF应用程序,最后演示文稿是Asp.Net MVC应用程序.
像往常一样,中间层是执行所有业务逻辑的层.访问数据库,定义业务规则等.
好的,到目前为止一切顺利!但现在这里的问题是:在这种情况下你如何处理安全问题?我的意思是,用户必须登录ASP.NET应用程序,但我不仅要在ASP中进行身份验证,还要在WCF中间层进行身份验证,因为WCF服务应该被更多应用程序访问.
我希望用户登录Asp.Net应用程序并让WCF知道凭据.在WCF中是否存在某种会话以指定登录用户?
在这种情况下,专业人员如何处理安全性 我知道您可以通过邮件安全保护WCF服务,但Asp.Net和WCF如何在单个登录用户上同步?我希望根据用户的授权方式保护WCF操作.