【问题标题】:how to send password to spring boot restful webservice如何向spring boot restful webservice发送密码
【发布时间】:2017-01-07 22:00:44
【问题描述】:

我是 Web 服务和安全主题的初学者。我想编写一个用于登录的 Spring Boot RESTful Web 服务。我可以将 url 作为参数发送,但以同样的方式发送密码是不安全的。那么将密码传递给Web服务的方法是什么?

当我在网上看到人们提到哈希密码(但据我了解它不够安全)和使用 md5 等。由于我是初学者,它并没有在我的脑海中形成清晰的画面。

那么我应该按照哪种方式向restful web service发送密码呢?

【问题讨论】:

    标签: web-services rest security spring-boot


    【解决方案1】:

    要快速启动并运行它,请在 POST 请求中发送密码,使其在 URL 中不可见。

    通常在登录期间,密码被发送到服务器而不是其哈希值。该站点需要为https 以避免攻击者嗅探密码。

    此外,对服务器的所有后续请求都可以使用称为 X-Auth-Token 的令牌(由服务器提供)。此令牌作为 cookie 存储在用户的机器上,并且可以有到期时间以使会话失效。

    在服务器端,密码应以加密方式存储,建议使用Bcrypt

    除了 POST 和散列之外,网络安全还有很多。我建议观看 Rob Winch 的(前 2 个)excellent video presentations。他是 Spring Security 项目的负责人。

    好消息是,Spring Boot 使许多这些复杂的解决方案易于配置。查看 the same sitethis repo 了解其他此类功能的实现。

    【讨论】:

    • 感谢您提供与此主题相关的建议和分享资源。
    • @cincin 如果您认为答案对您有帮助,您应该点击对勾接受答案。
    【解决方案2】:

    最常见的方式是使用POST 请求,并在有效负载对象中包含用户名和加密密码。因此,在后端你会收到@RequestBody

    【讨论】:

      【解决方案3】:

      如上所述,基本的散列客户端实际上没有意义,因为客户端无论如何都会知道散列算法,因此不会真正隐藏任何东西。使用 HTTPS 可确保没有人可以读取您的有线数据。您可以在 wikipedia 上阅读有关 HTTPS 和公钥/私钥的更多信息。

      您可以将密码放在正文中,也可以作为“授权”标题作为“授权”:“基本用户名:密码”。 (https://en.wikipedia.org/wiki/Basic_access_authentication)。 URL 通常很糟糕,因为人们喜欢将粘贴的 URL 复制到电子邮件等中。

      重要的是这应该换成不包含密码的令牌。如果这是一个网络应用程序,那么您将存储在 HTML5 本地存储中或作为 cookie。如果是 Android/iOS,他们有办法存储为“首选项”。

      不久前我写了一些关于不同令牌及其存储方式的信息:https://www.moesif.com/blog/technical/restful-apis/Authorization-on-RESTful-APIs/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-02
        • 2017-04-29
        • 1970-01-01
        • 1970-01-01
        • 2020-11-13
        • 1970-01-01
        • 2015-10-21
        • 1970-01-01
        相关资源
        最近更新 更多