【问题标题】:WCF service authentication by SessionId通过 SessionId 进行 WCF 服务身份验证
【发布时间】:2011-12-28 11:58:26
【问题描述】:

我想通过会话管理对 WPF 客户端进行身份验证。 首先,用户在 wpf 表单的帮助下将访问 WCF 服务并生成一个 Seesion ID,如果用户再次想要访问该服务,而不是使用用户名和密码进行身份验证,我们希望使用之前的 Seesion ID 进行身份验证。在上一步中生成。

那么请提出获得所需输出的最佳方法是什么?

我没有使用 web.config 文件。相反,我在下面的 C# 代码中使用配置部分:-

[ServiceContract(SessionMode=SessionMode.Required)] 
public interface Iexecute { 
    [OperationContract] 
    string loginUserName(); 

    [OperationContract] 
    string LoginPassword(string SessionId); 
} 

[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)] 
public class Execute : Iexecute, IDisposable

配置的另一部分是:-

ServiceHost host = new ServiceHost(typeof(Execute), new Uri("net.tcp://localhost:4233"))) { host.AddServiceEndpoint(typeof(Iexecute), new NetTcpBinding(), "Execute"); 
NetTcpBinding tcpsessionBinding = new NetTcpBinding(); tcpsessionBinding.ReliableSession.Enabled = true; tcpsessionBinding.ReliableSession.InactivityTimeout = TimeSpan.FromMinutes(25); 

【问题讨论】:

  • 您是说使用用户名/密码访问相同的服务/方法一次,然后使用 sessionId?
  • 是的,你是对的Kangkan。但我不知道这是否是实现认证服务的正确方式。那么您能否提供实现身份验证的最佳方法(可以借助用户身份验证或 sessionId 生成来完成)
  • 但是这样一个要求的动机是什么?您想在服务上进行一些会话吗?如果身份验证发生的方式与第一次相同,会出现什么问题?毕竟这对用户来说是透明的。
  • 其实我在考虑性能问题。如果我每次比较 SessionId 而不是每次都匹配用户名和密码,可能会花费更少的时间。那么这难道没有意义吗?
  • 如果您希望会话 ID 和相同的会话 ID 在服务端有效,您需要为每个会话设置一个服务集,这通常会占用更多资源(因此在同一台机器上速度较慢)当您与每个呼叫的默认服务设置进行比较时。如果您不需要会话来进行活动,那么仅用于身份验证就没有点操作系统会话。考虑到用户名/密码身份验证的开销,在为身份验证提供每个会话服务之间的权衡将是负面的。

标签: wcf authentication


【解决方案1】:

如果你想为 wcf 服务使用会话,那么你必须在客户端使用单个代理服务。来自同一客户端的同一服务的另一个代理将创建一个新会话。在客户端使用单例代理可能会满足你的需要。

请参阅此 ling 以了解 WCF 会话和实例管理

http://msdn.microsoft.com/en-us/magazine/cc163590.aspx#S2

【讨论】:

  • 是的,你是对的Kangkan。但我不知道这是否是实现认证服务的正确方式。那么您能否提供实现身份验证的最佳方法(可以借助用户身份验证或 sessionId 生成来完成)
猜你喜欢
  • 1970-01-01
  • 2011-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-28
  • 1970-01-01
  • 2012-02-10
  • 1970-01-01
相关资源
最近更新 更多