【问题标题】:Query Restful API Passing Username and Password查询 Restful API 传递用户名和密码
【发布时间】:2015-11-12 02:57:36
【问题描述】:

我正在为我的用户构建一个 Restful API。

我有这些:

1. GET -> Users/{id} 这是通过Id获取的
2. POST -> Users/{DTO} 这是添加
3. PATCH/PUT -> Users/{DTO} 这是用于更新信息
4. 删除 -> 用户/{id} 删除
5. 删除 -> 用户/{用户名}/reset_pass 重置密码
6. POST -> 用户/?username={userName}&password={password}

所以我对数字 5 和 6(特别是 6)有点不确定。

我想知道您对此有何看法?在正文的查询字符串中发送我的用户密码。

我认为 Uber 使用了我用于重置密码的模式。你怎么看?

谢谢

【问题讨论】:

    标签: rest service restful-architecture rest-security


    【解决方案1】:
    4. DELETE -> Users/{id} Removing 
    5. DELETE -> Users/{username}/reset_pass Reset Password 
    
    • 这不一致。您可以通过用户 ID 或用户名进行识别。如果两者都需要,请使用不同的 URL 命名方案。
    • reset_pass 是动词。考虑使用DELETE Users/{id}/password。根据密码发生的情况,DELETE 可能适合也可能不适合用例。

    6. POST -> Users/?username={userName}&password={password}

    同样,这与您的 URL 格式不一致。如果您想为用户创建新密码,请使用POST Users/{id}/password

    我想知道您对此有何看法?在正文的查询字符串中发送我的用户密码。

    将其建模为请求正文更简洁,但在安全性方面没有区别。除非您使用 HTTPS,否则任何人都可以嗅探到 HTTP POST,无论您决定在请求中的哪个位置传递您的数据。

    【讨论】:

    • 谢谢,迪帕克。我喜欢你的回答。我要更改数字 6。如果我的删除端点不会永久删除用户怎么办?在这种情况下,我们将不得不软删除用户?
    • 我仍然不清楚数字 5。我们将生成一个令牌并向用户发送一封电子邮件,其中包含一个点击链接。所以我不确定我是否必须为此使用 DELETE ?可能 PATCH 是更好的选择?
    • 您不能直接通过电子邮件将链接发送至DELETEPATCH。单击这些会产生GET 请求。编写一个简单的 HTML 页面,该页面可以使用 DELETE HTTP 方法发出 ajax 请求,并通过电子邮件发送带有参数的链接。您可以在幕后软删除或硬删除。
    【解决方案2】:

    这只是我的看法,但在 #6 上,将密码放在 POST 请求的 JSON 正文中可能会更好。这样它就不会直接在 URL 中(我认为 REST 原则说,当您 POST 时,您应该将正文作为要发布的对象)。

    当然,这些密码应该已经过哈希处理,所以没什么大不了的,但它看起来更安全/更好。

    【讨论】:

    • 这是一个内部 API,我们正在使用防火墙和其他安全方法保护我们的服务。您对此有何看法?我试图说服我的团队使用 SSL,但架构师不想使用它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多