我在我的网站上设置了一个REST API,以便从我的数据库中返回信息。
我正在我的应用上实现登录和注册。但是,我不确定如何处理验证用户凭据(检查电子邮件是否已注册,密码是否符合其要求等)。
由于我的REST API不对公众开放,因此传递这样的数据是否安全:
/users/verify/email/{email_address}
/users/verify/password/{password}
或者有更好(更安全)的方法吗?换句话说,如何在登录/注册时验证和验证用户?
答案 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实现来处理此问题。