如何在WCF中使用会话关联性进行用户名/密码身份验证?

时间:2010-08-24 11:00:10

标签: wcf wcf-security

在询问this questionthis questionthis question时,似乎我正在咆哮错误的树。

我需要针对自定义API(在COM中)对用户进行身份验证,并且我需要保持该自定义API(COM对象)处于活动状态(对于该用户)for future WCF calls。在针对该自定义API进行身份验证期间,我可以获取custom-defined roles的列表。我也想用这些来授权服务方法。

此外,我需要能够远程revoke the user's session。这是由COM API引发的事件触发的。

我有一个自定义UserNamePasswordValidator,但似乎没有正确设置自定义主体的机制,所以看起来我正朝着错误的方向前进。

我如何做这三件事?

1 个答案:

答案 0 :(得分:0)

您可以在服务中完全处理身份验证。创建类似于以下的服务合同:

[ServiceContract(SessionMode=SessionMode.Required)]
public interface IService
{
  // All your operations marked with [OperationContract(IsInitiating=false, IsTerminating=false)] 

  // Two additional operations
  [OperationContract(IsInitiating=true, IsTerminating=false)] 
  void Login(string user, string password);

  [OperationContract(IsInitiating=false, IsTerminating=true)] 
  void Logout();
}

实施此合同的服务必须具有PerSession实例化。在Login方法中实现身份验证并在本地字段中存储COM对象。当新客户想要使用此类服务​​时,他必须先调用Login方法。因此,所有实例都将被正确验证,并且它们将存储它们的COM对象实例。

您还可以将InstanceContext和COM对象注册到某个全局类,该类将处理强制终止服务实例。这可能需要一些研究才能使其发挥作用。

确保使用一些安全绑定(加密),因为您将以纯文本形式发送用户名和密码。