来自移动应用的基于令牌的身份验证

Ser*_*rov 6 authentication json ios jwt

我正在学习使用JSON Web令牌进行基于令牌的身份验证,以下是我现在看到的用于移动应用程序的方法,例如使用Swift构建的应用程序:

  1. 我可以使用用户输入在app中创建一个对象,比如

    {username:"patrickbateman",密码:"ismyknifesharp",角色:"常规",...}

  2. 然后我可以用它从库中生成一个JWT令牌.

  3. 然后我将它发送到支持的API端点,比如/api/contacts/list.或者我是否必须发送登录名/密码进行身份验证?
  4. 服务器以某种方式检查令牌的正确性.但是怎么样?此服务器生成的令牌是否应保存在数据库中并用作密钥?或者每次我从客户端收到请求并将其与客户端令牌进行比较时,是否必须在服务器上生成令牌?
  5. 获取并管理我需要的所有数据.

以下是我的结论:

  1. 我不需要向服务器发送登录/密码对来验证用户.
  2. 每次我需要获取仅授权数据时,我需要发送令牌.
  3. 我应该实现一些算法,由于某些因素(如时间的推移)而更改生成的令牌,以便使令牌可过期.
  4. 我应该在头文件中发送令牌,但不一定,因为它可以在JSON请求的主体内部完成.

这些结论是否正确?检查客户端发送的令牌的方法是什么?

t4n*_*hpt 5

我的意见:

  1. 我们不应该在客户端上保留用户密码。客户端在登录/登录时应将密码发布到服务器,请勿将其保存在客户端中的任何位置。要求应为https,密码不应加密。我们稍后将在服务器端对密码进行加密。

  2. token用户成功登录后,服务器将为此用户生成一个。在token将包含在自身的过期日期。我们将使用令牌来验证服务器的权限。

  3. 我认为对API的每个请求都应提供令牌,但注册/登录/忘记密码请求除外。

  4. 令牌应放在请求的标头中。

  5. 服务器应允许客户端使用旧令牌请求新令牌(可能已过期)

以及“如何从客户端服务器检查令牌?”的答案。有很多方法可以做到这一点。下面的方法是我当前的方法:

服务器端生成一个令牌,该令牌是user info使用HMAC或RSA算法的加密字符串(例如,令牌过期时间,用户ID,用户角色...)和密码(仅保留在服务器端)。当用户提交时token,服务器可以解密并获取user info过期时间,而无需从数据库中查询。

无论如何,这个问题与Swift标签无关。