为与 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 授权标头,但是我发现代码不完整(请参阅从未声明过“UserKeys”变量的方式)。这就是我尝试更多地研究如何做到这一点(使用带有“授权”HTTP 标头的 HMAC 哈希,但在 google 上找不到太多内容?)它引导我阅读其他有关消息级安全性的文章,形成身份验证和自定义验证器,坦率地说,我不确定现在采取哪种方法是最好和最合适的。
综上所述(感谢您一直以来的聆听!),我想我的主要问题是,
- 我应该使用哪种安全实现?
- 有什么方法可以避免在每次 WCF 调用时发送用户名/密码?如果一开始就建立了连接,我不希望发送这些额外的字节,这将是在登录后允许进行后续调用之前。
- 如果我使用 SSL,我是否真的应该关心纯文本以外的任何内容?
如前所述,.NET 3.5 win forms 应用程序,IIS 托管的 WCF 服务,但重要的是我希望任何和所有 WCF 服务都需要此授权过程(但应该是会话、http 标头或其他),因为我不需要希望任何人都能够通过网络访问这些服务。
我知道上面的帖子很大,但我必须表达我已经失败的路线以及我需要完成的工作,非常感谢任何和所有帮助。
PS:我也知道这篇文章How to configure secure RESTful services with WCF using username/password + SSL如果社区建议我从 REST 转向 WCF 服务,我可以这样做,但是我开始这样做是为了保持一致性任何公共 API 的到来。
我认为重要的是我要说明我如何访问我的 WCF 服务(联系服务正在工作,但是验证凭据的最佳方法是什么 - 然后返回成员对象?):
WebChannelFactory<IMemberService> cf = new WebChannelFactory<IMemberService>(
new Uri(Properties.Settings.Default.MemberServiceEndpoint));
IMemberService channel = cf.CreateChannel();
Member m = channel.GetMember("user", "pass");
从 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 = HttpStatusCode.Unauthorized;
return null;
}
return new Member() { Username = "goneale" };
}