本机身份验证:最佳方法

时间:2020-02-03 23:55:18

标签: react-native authentication jwt

我正在构建一个本地用户可以登录的应用程序。因为我是一个初学者,所以我不确定如何建立安全环境的最佳方法。我已经计划了一项策略,但是在继续之前,我需要一些反馈。

策略

成功登录后,服务器将返回一个 auth令牌和一个刷新令牌(均为jwt)。身份验证令牌有效期为30分钟,刷新令牌有效期为6个月。我将两个令牌都存储在钥匙串(ios)或共享首选项(android)中。每当对服务器发出请求(1)时,auth令牌就会随请求一起发送到Authorization标头中。在服务器端,检查auth令牌的有效性(它是否已过期?)。如果令牌已过期,则服务器会将包含“ please_refresh”的响应发送到应用程序。这应该向应用程序发出信号,刷新令牌必须发送到服务器以创建新的身份验证令牌。完成此操作后,应使用新的auth令牌再次执行原始请求(1)。

// valid auth token
+-------------------+                                   +-------------------+ 
| CLIENT            |                                   | SERVER            |
|                   | ----- auth token to server -----> |                   |
| auth token: aaa   |                                   | auth token OK     |
| refresh token: bbb| <---- response to client   ------ |                   |
|                   |                                   |                   |
+-------------------+                                   +-------------------+

// invalid auth token
+-------------------+                                   +-------------------+ 
| CLIENT            |                                   | SERVER            |
|                   | ----- auth token to server -----> |                   |
| auth token: aaa   |                                   | auth token NOT OK |
| refresh token: bbb| <---- 'please_refresh_token' ---- |                   |
|                   |                                   |                   |
|                   | ----- refresh token to server --> | create new auth   |
|                   |                                   |             token |
| new auth tk: ccc  | <---- new auth token to client -- |                   |
|                   |                                   |                   |
|                   | ---> new auth token to server --- | auth token OK     |
|                   |                                   |                   |
|                   | <---- response to client    ----- |                   | 
+-------------------+                                   +-------------------+

这是对用户进行身份验证的好策略吗?另一种方法是在第一个请求中将刷新令牌和auth令牌一起发送,并在过期后立即立即更新auth令牌。

我对这种策略的疑问是:

  • 这是一个好方法吗?还是有改进的空间?
  • 6个月后,刷新令牌变得无效,因此用户必须再次登录。我并不是真的想要这样:我希望用户只要他/她想要就可以登录。我该如何解决这个问题?我应该添加第三个令牌来“刷新刷新令牌”吗? (这对我来说似乎不对。)
  • 如果这种方法(auth / refresh令牌)不可行,有人可以向我指出正确的方向吗?

谢谢!

0 个答案:

没有答案