我在我的网站上设置了一个 REST API,以便从我的数据库返回信息。
我现在正在我的应用程序上实现登录和注册。但是,我不确定如何处理验证用户凭据(检查电子邮件是否已注册,密码是否符合要求等)。
由于我的 REST API 不向公众开放,这样传递数据是否安全:
/users/verify/email/{email_address}
/users/verify/password/{password}
或者是否有更好(更安全)的方法来做到这一点?换句话说,如何在登录/注册时对用户进行身份验证和验证?
最佳答案
在 REST 中,您谈论的是资源。资源将通过其属性表达一些状态。
以您的示例为例,我会问自己:“为什么要验证电子邮件”、“为什么要验证密码”。因为您想验证用户是否可以注册。 因此,您的资源将不是电子邮件或密码,而是用户。
验证是一个 Action 。不适合 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 实现来处理这个问题。
关于android - 使用 REST API 验证用户凭据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32750637/