Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在WCF中使用会话关联进行用户名/密码身份验证?_Wcf_Wcf Security - Fatal编程技术网

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

如何在WCF中使用会话关联进行用户名/密码身份验证?,wcf,wcf-security,Wcf,Wcf Security,我问的时候好像找错人了 我需要根据自定义API(在COM中)对用户进行身份验证,并且我需要保持该自定义API(COM对象)处于活动状态(对于该用户)。在针对该定制API进行身份验证的过程中,我可以得到一个列表。我还想将这些用于服务方法的授权 此外,我需要能够远程访问。这是由COM API引发的事件触发的 我有一个自定义UserNamePasswordValidator,但它似乎没有正确设置自定义主体的机制,所以看起来我走错了方向 如何做这三件事?您可以在服务中完全处理身份验证。创建服务合同,类似

我问的时候好像找错人了

我需要根据自定义API(在COM中)对用户进行身份验证,并且我需要保持该自定义API(COM对象)处于活动状态(对于该用户)。在针对该定制API进行身份验证的过程中,我可以得到一个列表。我还想将这些用于服务方法的授权

此外,我需要能够远程访问。这是由COM API引发的事件触发的

我有一个自定义UserNamePasswordValidator,但它似乎没有正确设置自定义主体的机制,所以看起来我走错了方向


如何做这三件事?

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

[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实例。在登录方法中实现身份验证,并将COM对象存储在本地字段中。当新客户想要使用这种服务时,他必须首先调用Login方法。因此,您的所有实例都将得到正确的身份验证,并且它们将存储COM对象的实例

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


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

很有用,但是有没有办法使用它来执行基于[PrincipalPermission]的操作?还是必须强制执行?此解决方案不使用基于角色的安全性。如果您想使用基于声明性角色的安全性,您必须深入研究WCF的内部结构,然后再回到自定义授权策略。