在WCF / Web服务/ WS-Trust联合安全性的上下文中,对应用程序而不是用户进行身份验证的通用方法是什么?从我收集的内容来看,证书认证似乎是要走的路,IE会为应用程序专门生成证书。我在这里走在正确的轨道上吗?还有其他选择吗?
答案 0 :(得分:3)
如果应用程序在您的控制之下(例如您的服务器),那么一定要使用证书。 如果这是一个用户控件(桌面)下的应用程序,那么就没有真正的方法来强有力地验证应用程序。即使您使用证书,用户也可以提取证书并在该应用程序的上下文之外发送消息。 如果这不是一个关键的安全系统,您可以做一些好的事情,比如将证书嵌入应用程序资源中。但请记住,一旦应用程序在用户计算机上实际存在,其中的每个秘密都可能迟早被泄露。
答案 1 :(得分:3)
您要做的是解决一般的数字版权管理问题,这是目前尚未解决的问题。
远程认证有很多选项,涉及试图隐藏某种秘密(传统的密钥或半秘密行为特征)。
一些简单的示例可能会阻止您的API的临时用户解决它:
&officialclient=yes
&appkey=<some big random key>
nonce
,应用返回HMAC(secret,nonce)
)一般情况下,“防御者优势”非常小 - 无论你付出多少努力来尝试和验证与你交谈的软件实际上是你的软件,它都不会占用你的攻击者/用户更多努力来模仿它。 (为了打破我给出的第三个例子,你甚至不需要对官方客户进行逆向工程 - 用户可以联系官方客户来回答他们自己的客户收到的挑战。)
您可以追求的更强大的途径是许可/法律选择。一个着名的例子是Twitter,它阻止你通过API licence terms and conditions敲打任何旧客户端 - 如果你创建了自己的(流行的)客户端假装Twitter API作为官方Twitter客户端,假设是他们的律师会来敲门。