【发布时间】: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