WCF会话是否安全?

WCF会话是否安全?,wcf,security,session,Wcf,Security,Session,我正在开发一个带有某种身份验证的WCF服务 所有用户都是平等的,所以我计划需要会话,并且只有一个方法可以启动会话,而不会终止会话。简化: [OperationContract(IsInitiating = true, IsTerminating = false)] void Open(String user, String password); 因此,如果密码是错误的(同样,这是一种简化),我会提出一个异常,以便会话结束。这样,我就不需要在每个方法调用中检查凭据 这是一个好方法吗?若否,原因为

我正在开发一个带有某种身份验证的WCF服务

所有用户都是平等的,所以我计划需要会话,并且只有一个方法可以启动会话,而不会终止会话。简化:

[OperationContract(IsInitiating = true, IsTerminating = false)]
void Open(String user, String password);
因此,如果密码是错误的(同样,这是一种简化),我会提出一个异常,以便会话结束。这样,我就不需要在每个方法调用中检查凭据

这是一个好方法吗?若否,原因为何

更新:我得赶紧写这篇文章,所以我会尽量详细说明一下,让我的问题更清楚

身份验证方法是一项要求,我不是在问这个问题。我想了解会话管理

当我使用[OperationContract(IsInitiating=true,IsTerminating=false)]时,会话启动。我不需要存储ID或任何东西;WCF管理一切。当引发异常或调用IsTerminating=true的方法时,会话结束,随后对服务方法的调用失败,直到启动新会话


我想知道的是,攻击者是否很容易绕过WCF会话管理功能,在不调用Open的情况下自己创建一个会话,这是我服务的唯一方法,IsInitiating=true和IsTerminating=false,因此,合法启动会话的唯一方法。

WCF会话可以像您希望的那样安全,取决于您选择的绑定

但是,我建议上述方法不起作用,因为您的方法不会向调用客户端返回任何值,以指示在后续调用中应该传递什么(即会话ID)来进行自身身份验证


更好的方法可能是在绑定中执行所有安全检查(有关大量选项,请参阅上面的链接),让服务本身只公开方法,而不必担心对客户端进行身份验证。

是的,恶意客户端“劫持”是微不足道的除非您使用加密密钥加密所有带有会话标识符的通信,而该加密密钥是潜在的通信侦听器无法访问的,否则该会话是经过身份验证的会话。同样,如果没有足够的加密和防重放保护,他们也可以很容易地拦截传输的用户名和密码


有时,一旦开始做出实现选择,就需要重新审视需求。听起来这可能是其中之一…

这不是一个好方法。答案是你应该将安全处理推进到WCF框架中,因为你确信它是正确实现的,而不是你自己的。对不起,需求就是需求。我只想知道WCF会话的安全性。我不需要传递ID;会话由WCF自动管理。我需要知道的是,对于一个邪恶的客户来说,是否有一个合理的方法来伪造一个假会话而不打电话给Open。谢谢你的回答。如前所述,Open(字符串用户、字符串密码)是更复杂系统(针对外部系统的质询-响应身份验证)的一大简化。回到WCF会话,假设登录系统相当安全,您知道会话id以纯文本形式发送吗?有参考资料吗?我希望它能更详细一些。。。