一次性用户身份验证的最佳指南&;WCF服务

一次性用户身份验证的最佳指南&;WCF服务,wcf,authentication,Wcf,Authentication,我是wcf服务的新手,我见过人们在进行wcf服务的任何函数调用时总是发送用户凭证,如下所示 private static void Main(string[] args) { ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback( delegate { return true; }); var client = ne

我是wcf服务的新手,我见过人们在进行wcf服务的任何函数调用时总是发送用户凭证,如下所示

private static void Main(string[] args)
 {
    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(
         delegate { return true; });

     var client = new WcfServiceClient();
     client.ClientCredentials.UserName.UserName = username;
     client.ClientCredentials.UserName.Password = password;
     Console.Write(client.GetData(1));
     client.Close();
     Console.Read();
 }
我想,我将通过用户凭据一次和身份验证后,用户可以调用任何服务功能多次没有凭据。所以请指导我如何设计这种服务。寻找小样本代码,帮助我学习和实现。谢谢

您需要使用您的服务,然后您的客户可以与该服务建立会话。这只能在使用同一通道与服务通信时发生

例如,在上面的代码中,当调用Close()时,会话将终止

为了让您一次性建立安全上下文,然后重新使用它,您需要建立一个安全上下文,这意味着安全令牌将被检索一次,然后在后续操作调用中重复使用

但是,这仅适用于某些绑定,不适用于basicHttpBinding

更新

我发布的第二个链接概述了使用安全会话公开服务的两种不同方法。不幸的是,本文中没有包含客户端代码

客户机代码可以使用svcutil.exe生成(或在VS中添加服务引用),也可以使用WCF通道堆栈使用包含服务操作和数据协定定义的程序集动态创建客户机

如果在
配置部分中使用标准WCF绑定之一配置安全会话,则可以将绑定配置复制并粘贴到客户端配置中,这就是客户端使用安全会话所需的全部内容


所以WCF堆栈为您处理这个问题。希望这是清楚的。

回答得很好,但是先生介意发布一个小的示例代码,供人们阅读,并且能够理解如何建立安全会话,以及安全令牌将用于任何后续操作调用。或者给我们一个可以收集相同知识的链接。thanksHi@Mou请查看我答案的更新。希望能有帮助