Нетрудно изменить процесс входа в систему с проверкой подлинности с помощью форм, чтобы в дополнение к обычной проверке подлинности с помощью форм объект WebClient выполнял базовую проверку подлинности по URL-адресу API/токена, обслуживаемому веб-API DAL, настроенному с помощью Thinktecture IdentityModel. Затем возвращенный токен сеанса можно сохранить в словаре сеанса для последующего использования при вызове DAL.
Проблема в том, что у этих токенов разный срок жизни.
Я мог бы переписать приложение, чтобы хранить учетные данные в localStorage для использования при необходимости воссоздания маркера сеанса, но это уродливо и не идеально с точки зрения безопасности.
Возможно, есть способы настроить долговечность токена для одной или обеих этих систем, но я не знаю, какие условия поиска использовать (я пробовал искать долговечность токена и срок службы токена, но результаты не помогли).
Меня интересуют как философские, так и прагматические предложения о том, как лучше всего координировать два типа безопасности веб-приложений. Я был бы очень удивлен, если бы не было уже ответов на эту тему, если бы я только знал, что искать.
Немного предыстории, так как некоторые люди не понимают, о чем я спрашиваю.
Существует большое уродливое веб-приложение ASP.NET старой школы, которое использует безопасность на основе форм.
Я только что добавил новый материал в виде отдельного приложения DAL, использующего Thinktecture IdentityModel. Этот DAL используется двумя приложениями: приложением ASP.NET и SPA Durandal.
Они используют одну и ту же базу данных для проверки учетных данных, поэтому у них одинаковое пространство идентификации.
Я изменил процесс входа в старое приложение, чтобы оно также предоставляло учетные данные и получало токен сеанса от Thinktecture IdentityModel. Этот токен помещается в коллекцию Session, чтобы представляться всякий раз, когда старое приложение вызывает DAL.
Если вы запустите старое приложение, пройдете аутентификацию, сделаете что-то и закроете браузер, а затем снова откроете браузер, вы войдете в приложение ASP.NET без входа в систему, поэтому нет возможности создать токен сеанса. . Это проблема. Мне нужно, чтобы два токена имели одинаковый жизненный цикл.
Я подумал об одном возможном подходе. Я представляю его ниже как ответ, чтобы люди могли высказать свое мнение о его достоинствах или внести предложения по уточнению. Если я придумаю какие-либо другие идеи, я подкину их как ответы, и я надеюсь, что вы сделаете то же самое.