授权REST请求

jon*_*nii 15 authentication rest authorization http-headers rest-security

我正在开发一个有一些要求的REST服务:

  1. 它必须是安全的.
  2. 用户不应该伪造请求.

我目前提出的解决方案是拥有一个看起来像这样的自定义Authorization标头(这与amazon Web服务的工作方式相同):

Authorization: MYAPI username:signature
Run Code Online (Sandbox Code Playgroud)

我的问题是如何形成签名.当用户登录服务时,他们将获得一个密钥,他们应该能够使用该密钥对请求进行签名.这将阻止其他用户代表他们提交请求,但不会阻止他们伪造请求.

将要使用此服务的应用程序是一个iPhone应用程序,因此我认为我们可以在应用程序中嵌入一个公钥,我们可以进行额外的签名,但这是否意味着我们必须有两个签名,一个用户密钥和应用密钥的密钥?

任何建议都将不胜感激,我非常希望第一次能够做到这一点.

Joh*_*ink 8

答案很简单:无法做到.一旦您将任何解决方案发送给最终用户,他或她就可以一直攻击它正在与之通信的服务器.这个问题的最常见版本是在Flash游戏中使用高分列表作弊.您可以通过在客户端中嵌入某种加密并混淆代码来使其变得更难 ......但是所有编译和混淆的代码都可以反过来被反编译和不进行模糊处理.这只是你愿意为可能的攻击者花费多少时间和金钱的问题.

所以,你的问题是如何设法防止用户错误的数据发送到您的系统.这是如何防止用户损坏您的系统.您必须设计接口,以便由故障数据完成的所有损坏仅影响发送它的用户.


Ste*_*wig 1

我认为正确执行此操作的最简单方法是使用 HTTPS 客户端身份验证。苹果网站上有一个关于这个主题的主题。

编辑:为了处理授权,我将在服务器上为每个用户创建一个单独的资源(URI),并且只允许该(经过身份验证的)用户操作该资源。

编辑(2014):苹果在过去六年中改变了他们的论坛软件;该线程现在位于https://discussions.apple.com/thread/1643618