24

关于 WCF 和安全性,我正在兜圈子,所以我只想在这里提出很多问题,希望有人能帮助我清楚地了解情况。

  1. 有人可以给我一个关于传输与消息级别安全性的简单英语解释。

  2. 我有一个在 SSL 下运行的服务,它将根据用户的 Windows 凭据对用户进行身份验证。我还认为我了解如何通过 PrincipalPermission 限制对服务方法的访问。但是我如何实际检索当前的 IPrinciple,以便我可以根据谁在调用服务返回不同的结果?

  3. 我已经弄清楚如何打开跟踪,并且可以使用“Microsoft 服务跟踪日志查看器”查看我的跟踪日志,但如果我能弄清楚我正在显示什么,那我就该死了。有没有像样的资源来解释如何使用这个东西?

  4. 使用“证书”clientCredentialType 时,这与 SSL 有什么不同吗?

  5. 使用“Windows”clientCredentialType 时,如何查看正在传递的 Windows 用户?

  6. 我的要求意味着我必须使用 basicHttpBindings - 我是否正确假设:

    • 我只有传输级别的安全性可供我使用?
    • 我无法为此绑定实现自定义用户名/密码?

我知道这些问题可能看起来很愚蠢,但任何有助于澄清的帮助都会有帮助。

编辑:

  1. 如何以与 .asmx 服务类似的方式将自定义 SOAP 标头添加到我的服务中?这是一种有效的方法吗?

编辑:

除了上述问题,我想知道是否可以通过检查 Active Directory 来根据其 Windows 用户对 Windows 移动设备进行身份验证。到目前为止,我发现这似乎不太可能。

NB 对于那些不知道 Windows CE 版本的 WCF 有什么可用的人:仅传输级别安全性,以及客户端凭据类型的无/证书。因此,CE 的 WCF 似乎默认情况下不允许这样做,但我可以在消息中安全地发送此信息(通过方法签名)吗?这是发送此类信息的可接受方式吗?

4

3 回答 3

15

我不知道所有答案,但这是我知道的答案

  1. 传输安全性意味着在传输消息时对通信进行加密,因此无法读取和/或篡改。消息安全性意味着消息本身的内容在传输过程中是加密的,但不一定。例如,消息安全可以与 HTTP 一起使用,而传输安全则需要使用 HTTPS(或其他绑定)。
  2. IPrincipal 主体 = Thread.CurrentPrincipal;
  3. 没有答案
  4. 是的,尽管 SSL 本身使用证书,但它并不相同。您可以让客户端发送一个服务已知的证书或由受信任的权威机构签署的证书,以使服务知道客户端是谁以及是否允许他们进行呼叫。使用 SSL 只会确保第三方无法通过拦截网络包来读取客户端与服务之间的通信。
  5. IPrincipal 主体 = Thread.CurrentPrincipal; 主体.身份.名称;
  6. 不。
    • 您可以选择无、传输、消息和混合安全性,但是传输安全性将需要使用 HTTPS 调用端点,因为那是协议的安全版本
    • 编辑:查看此论坛上的讨论。

这些问题当然并不愚蠢。

PS 我可以推荐 Juval Lowy 所著的Programming WCF services一书,它非常深入,并且附带了一个非常有用的框架来扩展 WCF/简化某些事情。

于 2009-01-19T00:15:24.067 回答
4

查看WCF 安全指南。如果您需要更多信息,您应该可以在那里找到所有信息,它非常完整。虽然看起来@olle 给出了一个非常完整的答案......

于 2009-01-19T07:29:38.603 回答
0

还要检查这些WCF 常见安全方案

于 2012-07-06T03:36:03.963 回答