我正在创建一个应用程序,您应该在其中注册/登录以使用它。现在,我正在为此实施一个安息的网络服务,我不确定我是否要正确。我的工作流程是:
要注册,用户在用户名,电子邮件和密码等凭据中键入。该应用程序哈哈密码并将包含凭据的帖子请求发送到我的Web服务,并且Web服务将新用户保存到数据库中。
要登录系统,该应用程序发送了一个get请求,包括参数用户名和密码的哈希,对网络服务进行比较,比较哈希值并返回适当的成功响应代码。
应用程序和Web服务之间的通信由SSL确保。
这是注册/登录系统的正确且安全的工作流程吗?如果没有,为什么不安全,您可以推荐另一个工作流程吗?欢呼。
最重要的部分应该是您的Web服务只能通过HTTPS到达。我认为您正在谈论一个移动应用程序。该应用不应哈希密码,Web服务应执行此操作,然后存储用户。移动应用程序可以进行逆向工程,然后您知道如何哈希密码。因此,要以一种宁静的方式创建用户将是在身体中使用用户名,电子邮件和密码发送发布请求。
例如 post/users
{
"username": "john-doe",
"email": "mail@example.org",
"password": "some password"
}
对于身份验证/授权,您可能会考虑OAuth 2,但这需要大量时间来实施。另一个选择是拥有另一个称为访问tokens的REST资源。因此,每当您需要身份验证时,您就可以执行帖子/访问请求来创建访问令牌。
post/access-tokens
{
"username": "john-doe",
"password": "some password"
}
响应
{
"access_token": "9d91c97fc0f98a6311f101246e252ab3230c261c2af",
"expries_in": 3600
}
然后,移动应用需要考虑到它始终在到期前不久就会创建一个新的访问令牌。Oauth 2还为此目的刷新了代币,并与访问令牌一起交付。然后,您只需将刷新令发送到Web服务即可检索新的访问令牌。经过身份验证后,您需要在需要身份验证的Web服务中将访问令牌包括在授权标题中。