授权REST请求

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

  • 它必须是安全的。
  • 用户不应该能够伪造请求。
  • 我目前提出的解决方案是有一个自定义授权标头,看起来像这样(这与亚马逊网络服务的工作方式相同):

    Authorization: MYAPI username:signature
    

    我的问题是如何形成签名。 当用户登录到服务中时,他们被给予一个秘密密钥,他们应该能够用来签署请求。 这将阻止其他用户代表他们提交请求,但不会阻止他们伪造请求。

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

    任何意见将不胜感激,我很想第一次得到这个权利。


    我认为最简单的方法是使用HTTPS客户端认证。 苹果的网站在这个主题上有一个线索。

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

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


    答案很简单:无法完成。 只要您将任何解决方案发送给最终用户,他或她就可以随时攻击与之通信的服务器。 这个问题最常见的版本是Flash游戏中的高分列表作弊。 通过在客户端中嵌入某种加密并对代码进行混淆,可以使其变得更加困难......但是,所有编译和混淆的代码都可以反编译并且不混淆。 这只是你愿意花费多少时间和金钱,同样也是潜在攻击者的问题。

    所以你的担心不是如何设法防止用户向你的系统发送错误的数据。 这是如何防止用户损坏您的系统。 您必须设计接口,以便由错误数据造成的所有损害仅影响发送它的用户。


    HTTP摘要认证有什么问题?

    链接地址: http://www.djcxy.com/p/71345.html

    上一篇: Authorizing REST Requests

    下一篇: Access database securely from iOS App