Я использую механизм авторизации OAuth2 для моего мобильного приложения для доступа к моему серверу ресурсов.Я определил клиента с секретным именем mobile_client
и использую код авторизации для получения маркера обновления.У меня также есть один пользователь user@app.pl
, который использует мое приложение на двух мобильных телефонах.Я заметил проблему с кражей токенов.
Сценарий выглядит следующим образом:
+---------------+
(Phone 1)----------- Refresh Token1----------->| Authorization |
(Phone 1)<--- Access Token1+Refresh Token2-----| Server |
+---------------+
+----------+
(Phone 1)---- Access Token1 ---->| Resource |
(Phone 1)-- Protected Resource --| Server |
+----------+
+---------------+
(Phone 2)---------- Refresh Token2 ----------->| Authorization |
(Phone 2)<--- Access Token2+Refresh Token3-----| Server |
+---------------+
+----------+
(Phone 1)---- Access Token1 --->| Resource |
(Phone 1)<- 401 TOKEN EXPIRED! | Server |
+----------+
Похоже, что user@app.pl
на телефоне 1, и телефон 2 получил один и тот же токен обновления с моего сервера авторизации для вызовов с тем же приложением и именем пользователя,Это в итоге привело к тому, что второй вызов обновил токен доступа и на телефоне 1.
Это правильное поведение сервера авторизации?
Я использую Spring Security Oauth2 2.3.3.RELEASEи Spring Security 5.1.0.RELEASE
Edit
Как я вижу в спецификации Google oauth2, они предоставляют больше токенов обновления для каждого пользователя, так что это должно быть настроено каким-либо образом в Spring.
В настоящее время существует ограничение в 50 токенов обновления на учетную запись пользователя для каждого клиента.Если предел достигнут, создание нового токена обновления автоматически делает недействительным самый старый токен обновления без предупреждения.