繁体   English   中英

如何安全地验证WCF服务方法的调用程序集?

[英]How do I securely authenticate the calling assembly of a WCF service method?

当前情况如下:我们有一个生产.net 3.5 WCF服务,整个组织中的多个应用程序都通过wsHttpBinding或netTcpBinding使用该服务。 使用Windows集成安全性在传输级别上完成用户身份验证。 该服务具有方法Foo(string parameter) ,该方法只能由给定AD组的成员调用。 字符串参数是必需的。

一个新的客户端应用程序开始起作用(.net 3.5,C#控制台应用程序),它消除了使用string参数的必要。 但是,仅应允许来自此特定应用程序的调用省略string参数。 服务器仍应知道客户端应用程序的调用者的身份,因为AD组限制仍然适用(排除客户端的模拟)。

我找到了一种在消息头中传递调用(强命名)程序集的“证据”的方法,但是这种方法显然是不安全的,因为“证据”很容易被欺骗。 同样,CAS(代码访问安全性)似乎是一种可能的解决方案,但是我似乎无法弄清楚在这种特定情况下如何利用CAS。

有人对如何解决这个问题有建议吗?

编辑:我在这个问题上找到了另一个话题 显然得出的结论是,根本不可能以安全的方式实施。

在我看来,您需要将安全性扩展到单独的服务中……以这种方式走更联盟的路线,您可以在两种情况下都使用公钥和私钥来实现握手形式的加密,以生成安全的会话令牌。

这样,您就可以同时获得Windows a =诱变和自定义解决方案的作用,同时保留安全性方法的属性(我假设您是通过这种方式实现的。)

不过,这听起来似乎有点工作-我不得不从头开始,遇到一些跨域/授权问题。 但是我确信这个主意是好的。

但是最终您会得到一个很好的基于可靠声明的安全模型

您可以得到来电者的地址:

 RemoteEndpointMessageProperty clientAddress = 
    OperationContext.Current.IncomingMessageProperties[RemoteEndpointMessageProperty.Name] 
as RemoteEndpointMessageProperty;
           string address = clientAddress.Address;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM