我在内部网的服务器上托管了WCF服务。它揭示了一种方法。
我在同一个Intranet上有100,000个以上的Windows客户端。
在每个客户端上运行的应用程序调用WCF服务的单一方法。
但是,我只希望来自该应用程序的调用能够进行该调用。在同一用户帐户下运行在客户端上的任何其他客户端应用程序都不应该能够调用该方法。
问题:
我们该如何实现这种安全性?共享的秘密(无论如何都可以通过反编译发现)是唯一的方法吗?
我在内部网的服务器上托管了WCF服务。它揭示了一种方法。
我在同一个Intranet上有100,000个以上的Windows客户端。
在每个客户端上运行的应用程序调用WCF服务的单一方法。
但是,我只希望来自该应用程序的调用能够进行该调用。在同一用户帐户下运行在客户端上的任何其他客户端应用程序都不应该能够调用该方法。
问题:
我们该如何实现这种安全性?共享的秘密(无论如何都可以通过反编译发现)是唯一的方法吗?
看一看这个:http://msdn.microsoft.com/en-us/library/aa354513.aspx 本示例使用用户名/密码认证,您可以在客户端应用程序设置中轻松配置并通过调用传递它们。或者您可以使用在一段时间后过期的令牌认证。
应用程序标识通常基于一些客户端秘密。但是,如果攻击者应用程序使用与授权应用程序相同的凭据运行,那么很难阻止攻击者应用程序调用您的服务。你怎么能防止攻击者的应用程序得到秘密?
如果您可以让授权应用程序在任何帐户下运行,您可以查看grouped managed service accounts。在这种情况下,帐户(和密码)由Windows管理。然后,您可以使用证书身份验证,并仅向管理帐户授予对私钥的读取权限。
分组的托管服务帐户确实需要您的域控制器在Windows 2012 R2上运行。
如果您不希望密钥出现在您的应用中,您可以使用客户端证书或DNS名称。这些方法是否可行取决于您的域管理员如何设置系统管理。 – CodeCaster 2014-12-04 18:05:59