【问题标题】:Setting up web services with x509 and multiple clients and how to distinguish clients?使用 x509 和多个客户端设置 Web 服务以及如何区分客户端?
【发布时间】:2012-04-13 15:38:09
【问题描述】:

按照这些twolinks,我能够实现一个简单的具有 x509 认证的 Web 服务,以及一个经过身份验证的测试客户端来使用该服务。

现在,它看起来像这样:

 --------------
| ServiceA.svc | ------------> Test Client 1
|  -GetData()  |
 --------------

我怎样才能扩展我必须完成的事情:

 --------------
| ServiceA.svc | ------------> Test Client 1
|  -GetData()  | ------------> Test Client 2
|  -SaveData() |
 --------------
| ServiceB.svc |-------------> Test Client 1
|  -GetData()  |
 --------------
| ServiceC.svc |-------------> Test Client 2
|  -SaveData() |
 --------------

我已经设置了服务,并且可以使用测试客户端 2。

以下是我的一些问题:

  • 我需要为测试客户端 2 创建单独的证书吗?
  • 配置文件/端点/行为的外观如何?我认为 Service B 和 C 很容易设置,因为它与我现在拥有的基本相同,但现在 ServiceA 将被两个客户端使用,我有点迷茫。
  • 如果调用 ServiceA,我如何知道是哪个客户端调用它?我可能想限制他们可以调用的方法(即 TC1 只能使用 GetData(),TC2 只能使用 SaveData()),并且能够记录谁在访问这些方法。

如果需要,我可以在配置文件中发布我拥有的内容,但它看起来基本上是上述两个链接的内容。

【问题讨论】:

  • 正是我所追求的问题.. +1
  • 你能通过回答你的问题来发布你最终做了什么吗?
  • •我需要为测试客户端 2 创建单独的证书吗? (是) • 配置文件/端点/行为是什么样的?我认为服务 B 和 C 很容易设置,因为它与我现在拥有的基本相同,但是现在两个客户端都将使用 ServiceA,我有点迷茫。 (配置文件中有多个“行为”节点)
  • •如果调用 ServiceA 我如何知道是哪个客户端调用它?我可能想限制他们可以调用的方法(即 TC1 只能使用 GetData(),TC2 只能使用 SaveData()),并且能够记录谁在访问这些方法。 (在代码中,使用ServiceSecurityContext.Current.PrimaryIdentity.Name

标签: wcf web-services wcf-security x509certificate x509


【解决方案1】:

是的,每个客户端都需要一个单独的证书。然后从操作中就可以得到它的显着标识:

ServiceSecurityContext.Current.PrimaryIdentity.Name

最佳做法是将授权过程分开,如下所述: http://msdn.microsoft.com/en-us/magazine/cc948343.aspx

【讨论】:

  • 谢谢!那是一篇内容丰富的文章。后续问题:主要身份名称是否与我命名证书的名称相同?在我原始帖子的第一个链接中,客户端证书名为“WcfClient”,我是否使用此确切字符串验证主身份名称?
  • 我相信主要身份将是证书的主题名称,这里确实是 WcfClient。不保证证书的所有其他部分都是唯一的。
  • 再次感谢。我刚刚对其进行了测试,它给了我类似“CN=WcfClient;FJFJD78FSDSOME0HASH0CODE0HERE”之类的东西,我绝对可以使用。
猜你喜欢
  • 1970-01-01
  • 2014-09-04
  • 1970-01-01
  • 2020-10-23
  • 2012-08-07
  • 1970-01-01
  • 1970-01-01
  • 2014-05-21
  • 1970-01-01
相关资源
最近更新 更多