Как безопасно хранить ReturnUrl в IdentityServer4?

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

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

URL-адрес возврата обычно передается как часть процесса входа в систему. Можете ли вы показать, что вы на самом деле пытаетесь сделать и почему поведение по умолчанию не работает для вас?

poke 07.04.2019 23:51

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

MichaelChan 08.04.2019 06:39

Поделитесь с нами, что вы пробовали и где это не сработало. Что такое internal logins? Есть ли у вас проблемы с перенаправлением при регистрации или внутреннем входе в систему?

Edward 08.04.2019 07:35
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
127
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

So currently, I'm passing it around as a field in each View Model used by each view so it can be returned. Is this a sound approach?

Да, как вы решите передать это, зависит от вас, я выбираю тот же подход. В качестве альтернативы вы можете использовать TempData, Sessions или даже localStorage. Я думаю, что наличие его в моделях (моделях просмотра) - это хороший подход, потому что вы явно указываете, где вы хотите, чтобы возвращаемый URL-адрес существовал, иначе он может сохраняться в контексте, который вам не нужен.

Теперь контрольный вопрос, потому что, очевидно, вы сможете увидеть обратный URL-адрес в поле адреса браузера.

В рамках настройки Identity Server 4 вы указываете, какие возвращаемые URL-адреса вам разрешено перенаправлять обратно, поэтому я не думаю, что есть какой-либо вред, если пользователи увидят URL-адрес перенаправления.

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

Если вы имеете в виду надежность, а не безопасность, напишите тесты, которые дадут вам уверенность в том, что ваш код работает.

Спасибо за все материалы. Что касается безопасности, OAuth dotnet core использует одноразовый номер для предотвращения повторов, поэтому я думаю, что эта часть покрыта.

MichaelChan 08.04.2019 23:08

Другие вопросы по теме