【问题标题】:How to authenticate an application, instead of a user?如何验证应用程序而不是用户?
【发布时间】:2013-08-19 18:57:28
【问题描述】:

在 WCF/Web 服务/WS-Trust 联合安全性的上下文中,对应用程序而不是用户进行身份验证的普遍接受的方法是什么?据我所知,证书身份验证似乎是可行的方法,IE 专门为应用程序生成证书。我在正确的轨道上吗?还有其他选择吗?

【问题讨论】:

  • 您能澄清一下您要保护的内容吗?
  • 我希望我的官方客户端应用程序对我的 Web 服务具有特殊权限,而普通 api 用户不会。

标签: wcf web-services security authorization


【解决方案1】:

您要做的是解决一般的数字版权管理问题,目前这是一个未解决的问题。

远程证明有很多选项,包括尝试隐藏某种秘密(传统密钥或半秘密行为特征)。

一些简单的示例可能会阻止您 API 的普通用户使用它:

  • 在请求中包含&officialclient=yes
  • 在请求中包含&appkey=<some big random key>
  • 在应用中存储一个秘密并使用简单的质询/响应:向应用发送一个随机的nonce,应用返回HMAC(secret,nonce))

但总的来说,“防御者优势”非常小 - 无论您付出多少努力来尝试验证与您交谈的软件实际上是您的软件,它都不会占用您的攻击者/用户更多的努力来模仿它。 (打破我给出的第三个例子,你甚至不需要对官方客户端进行逆向工程 - 用户只需连接官方客户端即可回答他们自己的客户端收到的挑战。)

您可以寻求的更强大的途径是许可/法律选项。一个著名的例子是 Twitter,它阻止你通过他们的API licence terms and conditions 敲击任何老客户 - 如果你创建了自己的(流行的)客户端,假装 Twitter API 是官方的 Twitter 客户端,假设他们的律师会来敲门。

【讨论】:

  • 很棒的答案...关于项目符号 3,您的意思是如果我使用 SHA,我只是在计算哈希之前将 nonce 附加到秘密值?
  • HMAC 是一种键控散列结构,它非常流行,因此为您提供 SHA-1 的库很可能也提供 HMAC-SHA-1。在我的示例中,输入到 HMAC 的密钥是您的应用程序的密钥,而要进行加密的数据是 nonce。
【解决方案2】:

如果应用程序在您的控制之下(例如您的服务器),那么一定要使用证书。 如果这是用户控制(桌面)下的应用程序,那么就没有真正的方法来以强大的方式对应用程序进行身份验证。即使您使用证书,用户也可以提取它并在该应用程序的上下文之外发送消息。 如果这不是一个关键的安全系统,您可以做一些足够好的事情,例如将证书嵌入应用程序资源中。但请记住,一旦应用程序实际位于用户计算机上,其中的每个秘密迟早都会被泄露。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 2022-01-13
    • 1970-01-01
    相关资源
    最近更新 更多