【问题标题】:Supplying credentials safely to a RESTFUL API安全地向 RESTFUL API 提供凭据
【发布时间】:2010-10-30 23:44:31
【问题描述】:

我创建了一个 RESTful 服务器应用程序,它位于有用的 URL(例如 www.site.com/get/someinfo)并为请求提供服务。它是在 Spring 中构建的。

但是,这些访问受密码保护。我现在正在构建一个客户端应用程序,它将连接到这个 RESTful 应用程序并通过 URL 请求数据。如何传递凭据?目前,它只是向用户弹出用户/密码框,但我希望用户能够在客户端应用程序的框中输入用户名和密码,并让客户端应用程序在何时将凭据提供给 RESTful 应用程序它请求数据。客户端是使用 Struts 构建的。

干杯

编辑 - 我认为我的问题不够清楚。我已经在强制使用 HTTPS,我的问题更多,在代码中,当我从 www.site.com/get/someinfo 请求数据时,如何在发出请求的同时传递我的凭据?

【问题讨论】:

  • 这似乎很有用。他们提到的 HTTP AUTH 事情 - 这是明确完成的吗?我不需要使用令牌或类似的东西,我需要将此数据专门传送到 RESTful 应用程序,因为它稍后会使用凭据。我可以直接通过 AUTH 发送这些凭据吗?
  • 是的,我想我理解并认为您正在寻找身份验证方案,而不是通过客户端实现重复传递。我可能不是回答这个问题的人,因为我没有大量的 Java 经验,但它可能有助于发布你现在如何调用其余 uri 的 sn-p。是否存在允许传递基本身份验证凭据的重载?

标签: java rest struts passwords


【解决方案1】:

你或多或少有 3 个选择:

  1. HTTP Auth
  2. 滚动您自己的协议,最好是基于HMAC 挑战/响应
  3. OAuth

OAuth 目前容易受到多种网络钓鱼攻击的影响,这种攻击在很大程度上无法被目标检测到。因此,在协议修改之前我不会推荐它。

OAuth 也应该是关于设计安全协议有多困难的一课,所以我很犹豫是否推荐你自己的路线。

剩下的是 HTTP 身份验证,如果您可以使用它,这可能是最好的。

话虽如此,互联网上的几乎所有内容都使用基于表单的身份验证,而且许多人甚至不使用 https 来确保传输级别的安全性,因此对于您的目的而言,简单地发送密码文本可能“足够好”。即便如此,我还是鼓励使用 https,因为这至少可以减少中间人攻击的危险。

【讨论】:

    【解决方案2】:

    如果您可以在请求中添加 HTTP 标头,则只需添加 Authorization 标头:

    Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
    

    您使用基本身份验证,QWxhZGRpbjpvcGVuIHNlc2FtZQ== 位是“username:password”base64 编码(不带引号)。 RFC 2617

    【讨论】:

    • == 不应出现在 URL 中。您可以通过检查字符串长度并了解 base64 编码将其剥离并重新添加。
    • 授权标头不是 URL 的一部分。它是一个标头,在标头中放 == 没有任何限制。
    【解决方案3】:

    嗯,https 与身份验证无关,它只是传输级加密。

    如果你和一个HTTP api交互,不管它是不是https,然后弹出对话框,说明它使用HTTP认证,无论是basic还是digest。如果您的客户端实例化一个 http 客户端以从这些“服务”读取数据,那么您可以在实例化对象时传递这些凭据。

    如果您使用客户端脚本,XmlHttpRequest 也支持 http 身份验证。

    因此,就代码而言,将凭据传递给 RESTful 服务的方式取决于您使用的 http 客户端(为检索数据而实例化的对象)。您可以简单地自己从客户端收集这样的用户名/密码,并使用它来调用其他服务。

    【讨论】:

      【解决方案4】:

      查看现有解决方案。在这种情况下,oauth

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-19
        • 2011-06-18
        • 1970-01-01
        • 2015-10-12
        • 2020-10-16
        • 2018-07-27
        相关资源
        最近更新 更多