Как обрабатывать истечение срока действия токена (поступающего из внешней службы) в ядре

#c# #.net-core

#c# #.net-core

Вопрос:

Существует API, давайте назовем его API_ServiceProvider, который может быть вызван только с помощью токена. И токен генерируется другим API, давайте назовем его API_TokenGenerator. Теперь, чтобы вызвать API_ServiceProvider для получения данных, мне нужен токен из API_TokenGenerator. Но срок действия этого токена истекает через 10 минут. Как только у меня есть токен в течение 10 минут, я продолжаю вызывать API_ServiceProvider. Но когда он истечет, мои вызовы API_A завершатся неудачей, и мне нужно получить новый токен сейчас. Как это может наилучшим образом справиться с этим.Сетевое ядро?

Комментарии:

1. Разве вы не можете просто сохранить время истечения срока действия токена рядом с токеном и получить новый, если понимаете, что следующий вызов может превысить это время?

2. Ну, предположение владельца API_B заключается в том, что у меня не должно быть логики, основанной на времени (она может измениться). Я должен построить свою логику, чтобы принять код HttpStatus 403 и вызвать новый запрос, если произойдет 403.

3. Это действительно должно быть 401, поскольку 403 означает запрещенный, а не несанкционированный. В рамках текущей основной веб-модели (OAuth2) у вас будет доступ к времени истечения срока действия, поэтому API_B не требует его предоставления. Если это не вариант, вы можете встроить логику повторных попыток в пользовательский HttpClientHandler интерфейс, который вы предоставляете при создании вашего HttpClient , который перехватит 401 (in SendAsync() ), получит новый токен и повторит попытку. Таким образом, это было бы без проблем, где бы вы ни использовали свой HttpClient . Однако это дополнительный вызов, который был бы ненужным, если бы вы могли его отменить.

4. Спасибо за ответ @sellotape. но я просто собираюсь использовать токен для вызова API_ServiceProvider, и в идеале логика проверки токена должна быть концом API_ServiceProvider, а не моей. После получения токена от API_TokenGenerator все, что мне нужно сделать, это вызвать API_ServiceProvider с этим токеном. Я могу это сделать, введя логику повтора при вызове API_ServiceProvider, и когда я получаю сообщение об ошибке, я должен получить новый токен. Но мне нужно знать, есть ли лучший способ реализовать то же самое. Сетевое ядро

5. Также я переименовал API для лучшего понимания. API_A теперь является API_ServiceProvider, а API_B — API_TokenGenerator