【问题标题】:"Guarding" WCF service from certain users - application identity“保护”来自某些用户的 WCF 服务 - 应用程序标识
【发布时间】:2012-01-19 14:47:22
【问题描述】:

我们正在使用 WCF 服务。现在,我们正在使用 Windows 身份验证,但这不会持续很长时间。一些服务将位于防火墙之外,并使用在数据库中验证的用户名/密码。

我的技术负责人“害怕”任何用户都可以轻松地“添加参考”到我们拥有的服务并参加派对。他想通过添加另一个身份——应用程序来“保护”服务。他希望该服务接受来自某些应用程序的请求,这样某些用户就不能只使用该服务——添加对它的引用并调用。应用程序具有身份 + 凭证的概念是此处的操作原则,因为网络上的服务可能需要在满足请求之前验证这些凭证,以防止网络内部的恶意代码(即,不是应用程序) 使用“Joe User”最终用户凭据访问服务。

这有意义吗?

然后他认为 Juval Lowy 的书在附录中讨论了在 WCF 调用(安全拦截器)期间发送多个身份。没有具体建议所有这些都必须是最终用户身份,如果是这种情况,其中之一可能是发出请求的应用程序的身份。

如何做到这一点?

谢谢, 山姆

【问题讨论】:

    标签: wcf wcf-security


    【解决方案1】:

    发送应用程序身份的问题在于,用于确认身份的秘密必须存储在某个地方。如果它对机器上的一个应用程序可见,那么通常它对以相同身份运行的其他应用程序可见。

    您的经理会对“它来自授权机器”感到满意吗?如果是这种情况,您可以简单地使用客户端证书

    还值得退一步:如果用户经过身份验证并被授权执行他们请求的功能,你为什么关心他们来自哪个应用程序 - 如果他们是他们所说的人并且他们被允许做他们要求的事情,那么为什么他们不能使用提琴手来发出请求 - 这不是服务的重点(而不是紧密耦合的客户端服务器应用程序)?

    【讨论】:

    • 您能否扩展“仅使用客户端证书”?您如何拥有“授权机器”?
    • 好吧,如果您在机器上安装客户端证书(包括私钥),然后使用该证书进行身份验证,您正在证明机器上有授权证书,基于证书的身份验证已经内置到WCF 安全模型(这就是我说“简单”的原因)
    • >那么通常它会对运行在相同身份下的其他应用程序可见。 --- 我认为他在谈论每个应用程序具有不同的身份
    • 但正如我所说 - 你如何为应用程序提供一个由秘密支持的身份,以便恶意用户无法发现该秘密?
    • 好的,这是他对您的想法的反应:IIRC 证书是我们正在研究的选项之一 - 同上它如何集成到 WCF:它是否使用相同的身份/主体机制用于验证最终用户的 Windows 帐户(和其他来源),还是其他一些(可能是不透明的)机制?如果它“内置于 WCF 安全模型中”,那么它的工作方式可能会有所不同……我们只需要找出方法,就是全部。
    【解决方案2】:

    您可能需要查看 MSDN 文档中的 Common Security Scenarios,看看是否有任何选项符合您的需求。

    我眼前出现的选项是Transport Security with Certificate AuthenticationMessage Security with Mutual Certificates。两者都依赖于 X.509 证书。后一个选项在消息级别,因此您可以根据需要处理证书传递和安全协商。

    【讨论】:

      【解决方案3】:

      要使某人更难添加对您的服务的引用,您可以删除 mex 端点。这样一来,陌生人很难创建有效的请求消息。

      然后您可以手动将 WSDL 分发给您信任的人。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-26
        • 1970-01-01
        • 1970-01-01
        • 2021-04-14
        • 1970-01-01
        • 2010-12-29
        • 2017-09-25
        • 2010-12-02
        相关资源
        最近更新 更多