你没有实现你想要的 使用会话 在WCF?
2是一个合理的想法。它叫做Window Identity Framework。
与您提出的建议的唯一真正区别在于,在联合安全模型中,您将身份验证与应用程序分开。在WIF中,您向发出令牌(您的GUID)的受信任机构进行身份验证。令牌内的加密是一组声明(允许的操作)。客户端将令牌作为其WCF调用的一部分传递,声明转移到安全原则,突然您的应用程序在没有任何WCF知识的情况下执行基于角色的安全性。
WIF的缺点是它很复杂并且可能需要相当多的加速时间。
WIF的优势在于它由安全专家编写。如果您实际构建的是处理金钱或敏感数据的商业应用程序,您应该仅仅因为这个原因使用WIF。
这是个 旧文章 但这些想法很有动力。然后就是 MSDN 。
你使用guid的方法很好。看其他问题 WCF票证基础认证 和转介的帖子
WCF自定义消息标题
更新:方法比较。
第一种方法的好处是无状态/无会话的个别操作。客户端和服务都不需要记住先前身份验证调用的详细信息。但是,如果同一个客户端进行多次呼叫,最好记住故障单,而不是每次都记住并发送用户名和密码。 如果您担心重复调用数据库,可以缓存一段时间(例如30分钟) 用户名和密码(或更好的哈希)并在进行数据库调用之前比较缓存字典中新请求的详细信息。
第二种方法需要在客户端保持状态(即票证),因此有点复杂。但它更安全,因为您不需要在整个会话期间记住用户名和密码。对于您的方案,我更喜欢票务方法。
顺便说一句,登录后我仍然建议使用https(通常性能损失不是必需的)但它会阻止网络嗅探器窃取故障单并使用它来做一些恶意操作而不是用户。