OAuth2 в потере токена памяти из-за перезапуска приложения сервера - PullRequest
0 голосов
/ 19 марта 2020

Я столкнулся с этой проблемой на стадии тестирования моего приложения. Клиент устанавливал дату истечения срока действия токена в течение очень длительного времени (19 лет или около того), поэтому мы не будем часто запрашивать новый токен во время тестов. Но через некоторое время выяснилось, что токен уже истек (по истечении случайного времени).

Проблема заключалась в перезапуске / обновлении серверного приложения, что привело к потере токенов в памяти и к тому, что моя простая проверка на expires_in не работает :

if (_currentToken.ExpirationDate < DateTime.Now.AddMinutes(1))
{
    _currentToken = GetToken();
}

Как бы я защитил такой сценарий? С таким же успехом это может произойти на производстве, но, надеюсь, реже из-за меньшего количества перезапусков приложений и более короткого времени токена. К сожалению, у меня нет доступа к настройкам авторизации на стороне сервера, и токены не будут сохраняться ни в одном хранилище.

Я бы не хотел вызывать какое-либо фиктивное действие на сервере, чтобы проверять, возвращается ли оно 401 unauthorized перед каждым действие.

1 Ответ

1 голос
/ 20 марта 2020

IMO, ответственность за проверку токена на стороне сервера и принятие решения о том, может ли запрос с токеном получить доступ к указанным c защищенным ресурсам. Таким образом, как предложил @armagedescu, просто отправьте токен при выполнении запроса токена, серверная сторона проверит утверждения, такие как время истечения, эмитент ..., а также проверит подпись. Если срок действия токена истек, он вернет код состояния 401 и маркер носителя OAuth 2.0 spe c добавляет атрибуты error, error_description и error_uri в заголовок WWW-Authenticate для создания отчетов дополнительная информация об ошибке:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="example",
                   error="invalid_token",
                   error_description="The access token expired"

Затем на стороне клиента вы можете проверить ошибки и обновить sh токен доступа для выполнения другого запроса токена.

...