WCF安全性:用户名,密码和另一个参数

时间:2013-01-30 12:49:00

标签: wcf wcf-security wshttpbinding wcf-authentication

在我们的项目中,所有WCF服务都由wsHttpBinding(TransportWithMessageCredential,UserName)选项保护。

它运行正常,但现在我们需要使用一个参数(ClientId)来实现安全性。

当WCF服务收到呼叫时,它不知道呼叫的数据库是什么(在哪里检查用户名和密码),所以首先它应该是我们公司的“主”数据库(所有的客户端存储)并通过ClientId获取连接字符串。

我们如何实现这个目标?

2 个答案:

答案 0 :(得分:1)

我过去通过使用特殊格式的用户名字符串实现了这一点,以允许发送其他信息。没有关于如何通过这些字符串字段中的用户名和密码发送的确切规则,因此内容实际上可以是序列化对象,压缩字符串或您认为必要的任何内容。

我找不到任何其他方式来优雅地发送信息。

只需在AuthorizationPolicy实现中解析该信息。

答案 1 :(得分:1)

我用MessageInspectors解决了类似的问题。基本上,您创建了一个IClientMessageInspector,它将客户端ID添加到邮件头中,并IDispatchMessageInspector从该头读取客户端ID,并将其存储在apprpriate位置(如自定义实现IPrincipal设置为Thread.CurrentPrincipal