Я создаю собственное приложение, в которое пользователи могут войти. Поскольку я новичок, я не совсем уверен, каков наилучший подход к созданию безопасной среды. Я спланировал стратегию, но мне нужно получить обратную связь, прежде чем идти дальше.
Стратегия
После успешного входа в систему сервер возвращает токен auth и refre sh токен (оба jwt). Токен авторизации действителен в течение 30 минут, токен refre sh действителен в течение 6 месяцев. Я храню оба токена в цепочке для ключей (ios) или в общих настройках (android). Всякий раз, когда на сервер делается запрос (1), токен авторизации отправляется с запросом в заголовке авторизации. На стороне сервера токен аутентификации проверяется на достоверность (истек ли он или нет?). Если токен истек, сервер отправляет ответ приложению, содержащий «please_refre sh». Это должно сообщить приложению, что токен refre sh должен быть отправлен на сервер для создания нового токена авторизации. Когда это сделано, исходный запрос (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 ----- | |
+-------------------+ +-------------------+
Является ли это хорошей стратегией для аутентификации пользователя? Другой подход заключается в отправке токена refre sh вместе с токеном аутентификации в первом запросе и обновлении токена аутентификации сразу же после его истечения.
Мои вопросы по этой стратегии:
- Это хороший подход? Или есть место для улучшений?
- Через 6 месяцев токен refre sh становится недействительным, поэтому пользователь должен снова войти в систему. Я действительно не хочу этого: я хочу, чтобы пользователь входил в систему столько, сколько он / она хочет. Как я могу решить эту проблему? Должен ли я добавить третий токен в «refre sh the refre sh token»? (Мне это не кажется правильным).
- Если этот подход (аутентификация / refre sh токен) не подходит для go, может кто-нибудь указать мне правильное направление?
Заранее спасибо!