2017-01-11 2 views
2

У меня есть веб-приложение ASP.NET, которое служит для документов для клиента. Этот документ может быть в «отдельной» системе. Чтобы получить документ из этой системы, мне нужно войти в систему, затем он возвращает токен, который затем я использую при каждом запросе, который я ему делаю. (учетные данные для этой системы не зависят от текущего пользователя моего приложения, я просто фиксировал имя пользователя и пароль)Где хранить токен аутентификации другой системы в приложении ASP.NET

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

Каков рекомендуемый способ хранения такого рода переменных?

Использование статической переменной обескуражено, и использование Session будет хранить билет только для Пользователя.

+0

У вас есть автоматический процесс, который выполняется каждые 55 ~ 59 минут, регистрируется и сохраняет токен в базе данных, а затем все классы, которые используют эту систему, читают этот токен из базы данных? –

+0

Как насчет печенья с истечением 1 часа? Лично я не храню токен в базе данных, если мне не нужно выпустить токен обновления. Другие варианты включают хранилища HTML5 - хранилище сеансов (доступно только на текущей вкладке, значение очищается при закрытии вкладки) и локальное хранилище (значение сохраняется даже после закрытия вкладки/браузера) – Developer

+0

@Developer. Но это будет хранить другой токен для каждый другой пользователь (если я правильно понимаю), и я хотел бы избежать этого –

ответ

1

Я думаю, что у вас есть аутентификация приложения, а не аутентификация пользовательского приложения. В этом случае, как сохранить токен в кеше с истечением 1 часа? Итак, всякий раз, когда система пытается прочитать токен, сначала попробуйте получить значение из кеша. Если его пустой - то есть его первый тайм-логин или истекший кеш, - обратитесь в службу auth, получите токен и сохраните его в кеш.

Может быть, когда вы находитесь в среде с балансировкой нагрузки, вы можете столкнуться с тем, что каждый сервер имеет разные токены, которые, как мне кажется, подходят в вашем случае. Или вам может понадобиться рассмотреть что-то вроде кеша Redis.

0

Как Джош рекомендовал в комментарии выше, хранить токен в базе данных было бы лучше.

Как обновить этот токен - это выбор, который вам нужно сделать.

Вы можете запросить новый токен всего за 5 минут, когда старый токен истекает, запустив службу или задание. И ваше веб-приложение просто использует новый токен для извлечения документов.

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

Если хранение в базе данных является слишком сложным, вы можете рассмотреть возможность хранения токена и истечения срока действия во временном файле на самом веб-сервере и использовать любой из вышеперечисленных двух подходов для обновления токена. Разница будет заключаться в том, что токен хранится в файле вместо базы данных.

Смежные вопросы