wcf - WCF session 是否安全?

标签 wcf security session

我正在开发具有某种身份验证的 WCF 服务。

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

[OperationContract(IsInitiating = true, IsTerminating = false)]
void Open(String user, String password);

因此,如果密码错误(同样,这是一种简化),我会引发异常,以便 session 结束。这样,我不需要在每个方法调用中检查凭据。

这是一个好方法吗?如果不是,为什么?

更新:我不得不匆忙写下这个,所以我会尝试详细说明一下,让我的问题更清楚。

身份验证方法是必需的,我不是在问它。我想了解 session 管理。

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

我想知道的是,攻击者是否可以相当容易地绕过 WCF session 管理的东西,在不调用 Open 的情况下自行创建一个,这是我的服务的唯一方法,IsInitiating=true 和 IsTerminating=false,所以,唯一的方法合法地开始一个 session 。

最佳答案

WCF session 可以像您喜欢的那样安全,具体取决于您选择的绑定(bind)。

http://msdn.microsoft.com/en-us/library/ms731172.aspx

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

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

关于wcf - WCF session 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6021056/

相关文章:

PHP 忘记密码功能

session - 在 cakephp 2 中的行为中读取 session 变量

PHP如何在开始 session 之前计算 session ID的长度

c# - XmlSerializer 和 xsi : deserialization

wcf - 如何执行 ssl 用户身份验证

security - 当前用户是LocalSystem 检查?

asp.net - 通过 web.config 设置拒绝目录中的所有文件

java - 身份验证过滤器无法正确识别身份验证

wcf - WSHttp 绑定(bind)和 ReliableSession/MaxRetryCount

jquery - 将数据表 jquery 插件与 WCF 服务结合使用的示例