0

我必须实现可由已知客户端使用的公共 WCF 服务。我还想使用自定义身份(不是 Windows 身份验证)对客户端进行身份验证。

我已经探索了使用自定义用户名和密码进行身份验证的 WCF 安全性。由于我必须实现异构网络的解决方案,我不能使用 Windows 身份验证。

我发现了两种方法可以将自定义身份验证合并到 WCF 中。我对以下每种方法几乎没有疑问。

1)通过“UserNamePasswordValidator”类。我们可以创建自定义用户名密码验证器并从数据库验证用户。这种方法非常适合实现 SSO(单点登录),因为每个请求在 SOAP 标头中都有凭据。客户不必在每次请求之前验证自己。

问题:

  1. 这种方法是否也可以轻松扩展为授权?因为身份验证发生在通过从 SOAP 标头获取凭据来调用服务之前。凭据也不是 ObjectContext 的一部分,我觉得授权方法并不简单。
  2. 要遵循这种方法,我们需要使用代理身份验证模式,为此我们需要第三方证书。是否建议采用这种方法,因为我们必须在项目中增加证书成本。
  3. 如果我们使用消息安全来加密消息,为什么我们需要证书?只是为了客户身份?既然我们知道谁会使用这项服务,我们就不能在生产中使用自签名证书吗?

2)通过“ServiceAuthenticationManager”类。我只知道使用此类的一种方法,那就是使用 Direct authetication 模式实现解决方案。同样在验证用户身份后,我们需要通过自定义标头为所有后续请求提供其身份或令牌以实现 SSO(单点登录)

问题:

  1. 这是公共服务的有效方法吗?我们是否应该强制用户通过每个请求中的自定义标头提供凭据(或一旦我们的服务通过身份验证后提供的令牌)?
  2. 这种方法不需要认证,因此我们可以节省项目成本。这是选择这种方法的足够理由吗?

我个人觉得第一种方法很容易实现,它是在 WCF 服务中实现身份验证的更标准的方法,但唯一的问题是我们需要第三方证书。

请回答我的查询,如果可能的话,建议我的要求的最佳方法。

谢谢,

安库尔

4

0 回答 0