我需要找到一种方法来验证/授权 WCF 服务中的用户。我正在使用存储用户凭据的外部身份验证服务。
例如。“Bob 使用我们的登录方法,我们将凭据发送到身份验证服务,该服务让我们知道这些凭据是否正确。” 如果 Bob 发送另一个请求,我们需要知道 Bob 是否已经通过身份验证。
现在正在客户端上创建一个会话,但它需要移动到服务器端。我们不能依赖客户的安全。
这可以通过使用安全 cookie 来解决,还是你们有更好的建议?
编辑!我只能使用身份验证服务器而无权访问它
我需要找到一种方法来验证/授权 WCF 服务中的用户。我正在使用存储用户凭据的外部身份验证服务。
例如。“Bob 使用我们的登录方法,我们将凭据发送到身份验证服务,该服务让我们知道这些凭据是否正确。” 如果 Bob 发送另一个请求,我们需要知道 Bob 是否已经通过身份验证。
现在正在客户端上创建一个会话,但它需要移动到服务器端。我们不能依赖客户的安全。
这可以通过使用安全 cookie 来解决,还是你们有更好的建议?
编辑!我只能使用身份验证服务器而无权访问它
您所描述的问题是一个众所周知的问题,它有(至少)两个标准化解决方案。
使用 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 身份验证库。其他服务可能会使用这种方法 - 例如 Facebook。
这在哪里工作得很好
它在 Internet 应用程序中非常常用,您作为 WCF 服务的所有者不一定知道用户或客户端。在某些方面,它是一个不太完整的标准(例如,它没有准确定义身份验证如何发生),因此,切换到替代授权服务器不太容易。
它的强项是:
对此的官方 .Net 支持位于 Windows Azure AD 身份验证库中
http://msdn.microsoft.com/en-us/library/windowsazure/jj573266.aspx
还有其他开源组件,例如 DotNetOpenAuth
哪种解决方案最适合您,主要取决于我要说的身份验证服务的性质。以及您是在企业还是互联网场景中。如果授权。服务可以很容易地调整为 WS-Trust 安全令牌服务 (STS),那么这将是一条很好的路线。如果向身份验证添加一些 Web UI。服务是可行的,OAuth 可能会更好。
或者,如果这两个选项都不可行,您可以从一种方法中借用模式并使用它,而无需使用完整的标准。
祝你好运!