0

Мы используем Grails и плагин OAuth2, но это более общий вопрос OAuth2.Предотвращение запросов на вход с использованием OAuth2 с одним и тем же пользователем, но с несколькими устройствами

Мы пытаемся решить проблему, когда один и тот же пользователь использует несколько устройств, и мы не хотим запрашивать их пользователя/пароль, если это не является необходимым. Возьмем следующее, например:

  • AT = Токен доступа
  • RT = Refresh Токен

(Предположим, начальная АЦ можно получить, используя тип гранта пароль и оба устройства получают один и тот же AT)

Device 1: 
1. Refresh, new AT 
5. Bad AT 
6. Refresh denied (bad RT) 
7. Need Password for AT, new RT ... Repeats every time it expires 

Device 2: 
2. Bad AT 
3. Refresh denied (bad RT) 
4. Need Password for new AT/RT 

Мы, очевидно, не хотим кэшировать пароль и не должны запрашивать пользователя, когда у нас есть токен обновления. Существует флаг для повторного использования маркера обновления, но если бы мы сделали, мы бы в конечном итоге генерировать новые маркеры доступа, например:

Device 1: 
1. Refresh, new AT 
4. Bad AT 
5. Refresh, new AT… Repeats every request 

Device 2: 
2. Bad AT 
3. Refresh, new AT 

Я предполагаю, что мы не первые столкнуться с такого рода проблемы, поэтому я подумал, что обращусь к мыслям/предложениям.

ответ

0

Мне кажется, что ваши 2 устройства должны получать разные токены доступа и обновлять токены. Количество выделенных жетонов зависит от реализации TokenStore, поэтому вы должны сосредоточиться, вероятно. Может быть, вы можете использовать пользовательский AuthenticationKeyGenerator для обеспечения того, чтобы эти 2 устройства получили разные токены? Или использовать JWT?