【问题标题】:Verifying user credentials with REST API?使用 REST API 验证用户凭据?
【发布时间】:2015-09-23 22:39:14
【问题描述】:

我在我的网站上设置了一个 REST API,以便从我的数据库中返回信息。

我现在正在我的应用上实现登录和注册。但是,我不确定如何处理验证用户凭据(检查电子邮件是否已注册、密码是否符合要求等)。

由于我的 REST API 不向公众开放,这样传递数据是否安全:

/users/verify/email/{email_address}
/users/verify/password/{password}

或者有没有更好(更安全)的方法来做到这一点?换句话说,我如何在登录/注册时对用户进行身份验证和验证?

【问题讨论】:

  • 请不要在 url 或获取 Web 服务中发送敏感数据,使用 POST 在正文请求中将数据发送到您的后端。

标签: android api rest android-intent android-activity


【解决方案1】:

在 REST 中,您谈论的是资源。资源将通过其属性表达一些状态。

通过您的示例,我会问自己:“为什么要验证电子邮件”、“为什么要验证密码”。因为要验证用户是否可以注册。 因此,您的资源将不是电子邮件或密码,而是用户。

验证是一种操作。 REST architecture 不适合的东西。

您要验证什么?您想注册一个新用户,但还要验证他是否被允许注册。因此,您将尝试在某些条件下将用户添加到您的用户集合中。在带有 HTTP 的 REST 中,这可以通过 POST 来完成,其作用类似于 add(User)。然后请求背后的逻辑可以对用户执行验证规则。

要发布数据,只需使用内容正文并使用标题获取更多信息。所以我会将我的 API 更改为:

HTTP method: POST
Path: /users
Content-Type: application/json
Body:
{"email_address":"qsdfg@sdfgh.com", "password":"qlmkdjfmqlsk"}

这将您的 API 简化为添加用户的单个入口点。允许或拒绝注册用户可以通过使用 HTTP 状态代码和消息来传达。

当然,以明文形式发送密码不是一个好习惯,但您可以使用 SSL 或 TLS 设置安全连接进行通信。

顺便说一句,在 URL 中发送敏感数据并不是一个好习惯。服务器可以记录 url,该 url 将向有权访问该日志的每个人显示用户的密码。

登录方式有点不同,但差别不大。

您需要一个资源,将用户唯一地链接到他与您的系统的对话。

HTTP method: POST
Path: /authentication
Content-Type: application/json
Body:
{"email_address":"qsdfg@sdfgh.com", "password":"qlmkdjfmqlsk"}

回应

Status-Code: 200
Content: 
unique-id-to-my-user

身份验证可以调用您的用户 api 来执行规则,然后生成 id。

您可以使用 OAuth2 实现来处理此问题。

【讨论】:

    【解决方案2】:

    如果您的 Web 服务是 Asp.Net WebAPI,它将为有效用户返回访问令牌,您可以使用带有用户名和密码的 Http POST 请求作为正文内容。

    有关示例代码,请看我在以下问题中的回答

    Implementing Oauth2 with login credentials from native login page

    为了更好的安全性,请使用 Https 而不是 Http。

    希望这会有所帮助!

    【讨论】:

      【解决方案3】:

      你可以使用POST方法。

      /注册用户名、邮箱、密码
      /login with email, 用户登录密码。

      请确保您没有明文传递密码。对其执行某种加密。

      【讨论】:

      • 并为客户端提供静态预配置加密密钥?它可以从客户端提取。您可以明文发送密码,但要确保通信通道安全。使用 HTTPS。
      猜你喜欢
      • 2021-07-03
      • 2015-09-01
      • 2017-11-20
      • 2015-06-13
      • 2013-07-25
      • 2013-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多