使用REST API验证用户凭据?

时间:2015-09-23 22:39:14

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

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

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

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

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

或者有更好(更安全)的方法吗?换句话说,如何在登录/注册时验证和验证用户?

3 个答案:

答案 0 :(得分:1)

您可以使用 POST 方法。

  

/注册用户注册的姓名,电子邮件,密码
  /使用电子邮件登录,用户登录密码。

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

答案 1 :(得分:1)

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

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

Implementing Oauth2 with login credentials from native login page

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

希望这有帮助!

答案 2 :(得分:1)

在REST中,你在谈论资源。资源将通过其属性表达某种状态。

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

验证是一项行动。与REST architecture不匹配的东西。

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

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

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

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

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

在网址中发送敏感数据不是一个好习惯。服务器可以记录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实现来处理此问题。

相关问题