我需要找到一种在WCF服务中验证/授权用户的方法。我使用外部身份验证服务来存储用户的凭据。
EG。 " Bob使用我们的loginmethod,我们将凭据发送到身份验证服务,该服务让我们知道这些凭据是否正确。" 如果Bob发送另一个请求,我们需要知道Bob是否已经过身份验证。
现在正在客户端上创建会话,但它需要移动到服务器端。我们不能依赖客户的安全。
这可以通过使用安全cookie来解决,还是你们中有人有更好的建议?
EDIT!我只能使用身份验证服务器而无法访问它
答案 0 :(得分:10)
您所描述的问题是一个众所周知的问题(至少)有两个标准化解决方案。
使用WS-Trust的联盟
第一个选项是基于SOAP的选项,它使用基于WS-Trust的活动联合。在这个解决方案中:
在这个模型中,通常的术语是:
这听起来很复杂,但在使用Windows Identity Foundation的.Net和WCF中得到了很好的支持。有很多可用的样本(可能全部)可以通过WCF配置而不是代码来完成。
这非常适合客户端具有加密功能的场景(如.Net客户端)以及存在良好框架的场景(如WIF)。对于浏览器和某些手机等低规格客户端,或者您无法控制客户端的情况,它不太好。
它通常用于企业方案,包括企业到企业联合。在互联网场景中使用较少。
它的优点是
概述可以在这里找到:
http://msdn.microsoft.com/en-us/magazine/ee335707.aspx
Google会向您展示更多演练和示例。
使用OAUth 2的联盟
在此解决方案中:
在OAuth术语中:
同样,这听起来很复杂,但它在.Net中得到了相当好的支持。目前可能不如WS-Trust方法。它受Windows Azure AD和客户端支持,使用Windows Azure身份验证库。其他服务可以使用这种方法 - 例如主页。
这适用于
它非常常用于互联网应用程序,您作为WCF服务的所有者并不一定了解用户或客户。在某些方面它是一个不太完整的标准(例如,它没有确切地定义身份验证的发生方式),因此,切换到备用授权服务器就不那么容易了。
它的优点是:
官方.Net对此的支持位于Windows Azure AD身份验证库
中http://msdn.microsoft.com/en-us/library/windowsazure/jj573266.aspx
还有其他开源组件,例如DotNetOpenAuth
哪种解决方案最适合您,主要取决于我所说的身份验证服务的性质。无论您是在企业还是互联网场景中。如果是auth。服务可以很容易地适应成为WS-Trust安全令牌服务(STS),那么这将是一条很好的途径。如果向auth添加一些Web UI。服务是可行的,OAuth可能会更好。
或者,如果两个选项都不可行,你可以从一种方法借用模式,并在不使用完整标准的情况下使用它。
祝你好运!