目前的情况如下:
我们有一个生产.net 3.5 WCF服务,由整个组织的几个应用程序使用,通过wsHttpBinding或netTcpBinding。使用Windows集成安全性在传输级别上进行用户身份验证。此服务有一个方法Foo(string parameter)
,只能由给定AD组的成员调用。字符串参数是强制性的。
新的客户端应用程序已经发挥作用(.net 3.5,C#控制台应用程序),这消除了字符串参数的必要性。但是,只允许来自此特定应用程序的调用省略字符串参数。客户端应用程序的调用者的身份仍然应该由服务器知道,因为AD组限制仍然适用(排除客户端的模拟)。
我找到了pass on the "evidence" of the calling (strong-named) assembly in the message headers的方法,但这种方法显然不安全,因为“证据”很容易被欺骗。 此外,CAS(代码访问安全性)似乎是一种可能的解决方案,但我似乎无法弄清楚如何在这种特定情况下使用CAS。
有没有人建议如何解决这个问题?
编辑:我找到another thread on this subject;显然,结论是,以安全的方式实施是根本不可能的。
答案 0 :(得分:0)
听起来像是你需要将安全性转移到单独的服务中...沿着更加联合的路线走这条路,你可以使用公钥和私钥来实现握手形式的加密,以便在两者中生成安全的会话令牌的情况。
通过这种方式,你仍然可以同时获得两个窗口的验证和自定义解决方案,同时保留安全方法的属性(我假设您正在以这种方式实现它。)
听起来像是一项相当多的工作 - 我必须从头开始做这个并遇到一些跨域/委托问题。但我相信这个想法很好。
如果你最终得到一个很好的基于声明的基于secuirty的模型
答案 1 :(得分:0)
您可以获得来电者地址:
RemoteEndpointMessageProperty clientAddress =
OperationContext.Current.IncomingMessageProperties[RemoteEndpointMessageProperty.Name]
as RemoteEndpointMessageProperty;
string address = clientAddress.Address;