使用WCF的身份验证服务

时间:2012-03-06 12:59:39

标签: c# asp.net .net wcf wcf-security

我有一个自定义MembershipProvider,如下所示。它根据Active Directory验证用户名和密码。我想把它作为“身份验证服务”。即使客户端使用表单身份验证或Windows身份验证,这也应该有效。

有一个提供员工信息的WCF“人力资源服务”。 “HR UI”网站正在使用“HR Service”WCF服务。现在,我们需要确保在访问“HR服务”操作之前,使用“身份验证服务”对使用“HR服务”的任何客户端进行身份验证。如果客户端应用程序经过一次身份验证,则下次不应再次验证(直到应用程序关闭)。当打开客户端应用程序的新实例时,需要从头开始进行身份验证。

我们如何实现它?我们是否有任何代码样本用于端到端流程演示?

注意:我应该可以使用自托管服务进行测试。

注意:客户端可以是任何平台(例如Java)。

namespace LijosCustomValidation
{
public sealed class LijoMembershipProvider : MembershipProvider
{

    public override bool ValidateUser(string username, string password)
    {
        bool isValid = true;
 //my logic to validate the user name and password
        return isValid;
    }

   //other implementations of Abstract Methods from MembershipProvider
  }

1 个答案:

答案 0 :(得分:4)

如果身份验证成功,您的身份验证服务应返回令牌。然后,该令牌应该被呈现给HR服务。

此时您可以选择HR服务的功能。它可以知道验证令牌的秘密,也可以调用auth服务来验证令牌。

如果你知道秘密,那么令牌应该是一些可以验证的值,所以它可以是对称加密的用户ID。理想情况下,它应该有一个时间组件来防止重放攻击。

我建议像

这样的东西
<hash value>|<token issue time>|<user id>

哈希值应该是第一个管道之后所有内容的哈希值(sha1,md5等)。然后,您可以对结果进行base64编码并传递它。然后验证令牌可以检查发布日期是否在某个时间范围内。

您还可以选择将令牌存储在客户端中的cookie中,并将cookie作为cookie传递给服务,或者将其作为服务的参数。可能还有其他选择,具体取决于您的客户端架构和你想如何构建你的服务。