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

时间:2015-11-11 06:12:03

标签: ios json authentication jwt

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

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

    {     用户名:“patrickbateman”,     密码:“ismyknifesharp”,     角色:“常规”,     ... }

  2. 然后我可以使用library从中生成JWT令牌。

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

    1. 我不需要向服务器发送登录/密码对来验证用户身份。
    2. 每次需要获取auth-only数据时,我都需要发送令牌。
    3. 我应该实现一些算法,由于某些因素(如时间的推移)而更改生成的令牌,以便使令牌过期。
    4. 我应该在头文件中发送令牌,但不一定,因为它可以在JSON请求的主体内部完成。
    5. 这些结论是否正确?检查客户端发送的令牌的方法是什么?

1 个答案:

答案 0 :(得分:4)

我的意见:

  1. 我们不应该在客户端上保留用户的密码。客户应在注册/登录时将密码发布到服务器,不要将其保存在客户端的任何位置。请求应为android:scaleType="fitCenter" ,密码不应加密。我们稍后会在服务器端加密密码。

  2. 用户成功登录后,服务器将为该用户生成httpstoken本身将包含过期日期。我们将使用令牌来验证服务器的权限。

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

  4. 令牌应放在请求标题内。

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

  6. “如何从客户端检查令牌?”的答案。有很多方法可以做到这一点。以下是我目前的方法:

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

    无论如何,此问题与user info代码无关。