为应用程序实现自己的注册和登录系统

时间:2017-12-02 00:40:00

标签: rest web-services login

我正在创建一个应该在其中注册/登录以使用它的应用。现在我正在为它实现一个宁静的网络服务,我不确定我是否采取了正确的方式。我的工作流程是:

要注册,用户会输入用户名,电子邮件和密码等凭据。该应用程序散列密码并将包含凭据的发布请求作为json发送到我的webservice,并且webservice将新用户保存到数据库中。

要登录系统,应用程序会向web服务发送包含参数username和密码哈希值的get请求,比较哈希值并返回适当的响应代码以便成功或失败。

app和webservice之间的通信由ssl保护。

这是注册/登录系统的正确且安全的工作流程吗?如果没有,为什么它不安全,你能推荐另一个工作流程吗?欢呼声。

1 个答案:

答案 0 :(得分:0)

最重要的部分应该是您的网络服务只能通过https访问。 我假设你在谈论一个移动应用程序。 应用程序不应该散列密码,Web服务应该这样做,然后存储用户。 移动应用程序可以进行逆向工程,然后您就知道如何散列密码。 因此,以一种宁静的方式创建用户将是在正文中发送带有用户名,电子邮件和密码的POST请求。

例如 POST / users

    {
      "username": "john-doe",
      "email": "mail@example.org",
      "password": "some password"
    }

对于身份验证/授权,您可能会考虑使用OAuth 2,但这需要花费大量时间来实施。 另一种选择是拥有另一个名为access-tokens的REST资源。 因此,无论何时需要进行身份验证,都需要执行POST / access-tokens请求来创建访问令牌。

POST / access-tokens

    {
      "username": "john-doe",
      "password": "some password"
    }

<强>响应

    {
      "access_token": "9d91c97fc0f98a6311f101246e252ab3230c261c2af",
      "expries_in": 3600
    }

然后移动应用程序需要注意它将在它到期前不久创建一个新的访问令牌。 OAuth 2还为此目的刷新令牌,这些令牌与访问令牌一起提供。然后,您只需将刷新令牌发送到Web服务即可检索新的访问令牌。 经过身份验证后,您需要在每个需要身份验证的Web服务请求中的Authorization标头中包含访问令牌。