#iframe #asp.net-mvc-5 #owin #azure-active-directory
#iframe #asp.net-mvc-5 #owin #azure-active-directory
Вопрос:
У меня есть приложение, которое настроено на использование Owin и Azure AD. Это работает хорошо, но теперь у меня есть требование запускать внутри iframe как часть стороннего решения.
Это нормально, если не считать безопасности. https://login.microsoftonline.com не позволяет запускать внутри iframe. Мой контроллер проверит, аутентифицирован ли пользователь, и если нет, вызовите ‘HttpContext.GetOwinContext().Аутентификация.Проблема(…………..’
По результатам исследований маловероятно, что я смогу что-либо сделать внутри фрейма. Мой единственный вариант создать страницу входа, которая перенаправляет на клиентское приложение, включающее iframe? Если срок действия истекает, iframe отображает сообщение об ошибке, в котором указано, что содержимое не может быть отображено во фрейме, это не очень элегантно.
Ответ №1:
AAD не разрешает создание страниц, на которых вводятся учетные данные. Эти требования связаны с необходимостью предотвращения атак в стиле взлома. Смотрите: https://www.owasp.org/index.php/Clickjacking . Вместо этого вы можете сначала выполнить полнокадровую аутентификацию, а затем выполнить проверку подлинности с помощью prompt =none, чтобы обновить билет. Prompt=none сообщает AAD, что ему не разрешено останавливаться и запрашивать учетные данные, поэтому этот поток всегда будет работать в iframe.
Комментарии:
1. Спасибо, Уилл, у вас есть пример параметра запроса, и вы не можете найти его, только что выполнив поиск по нему. Я использую HttpContext. GetOwinContext().Аутентификация. Проблема в контроллере, есть ли расширение или мне нужно перенаправить на созданный вручную URL-адрес?
2. Одно из уведомлений срабатывает при перенаправлении на IdP. Вы должны иметь возможность устанавливать контекст. Сообщение протокола. Подсказка = отсутствует. Смотрите: msdn.microsoft.com/en-us/library /…
3. @SteveNewton Что вы подразумеваете под «полнокадровой аутентификацией»?
4. Как бы то ни было, я не смог заставить это работать. Даже при
prompt=none
этом Chrome выдает мне «отказано в отображении <URL> во фрейме, потому что он установил для «X-Frame-Options» значение»запретить»».5. Привет, @RobSiklos. Удалось ли вам решить эту проблему? У меня тоже такая же проблема.
Ответ №2:
В качестве дополнения к принятому ответу я смог обойти проблему, убедившись, что оболочка URL-адреса iframe точно соответствует тому, что я указал при регистрации моего приложения в Azure AD. Например. если Azure AD имеет https://mydomain/My-App / в качестве одного из моих URL-адресов ответа убедитесь, что URL-адрес iframeпишется точно так же. Изначально у меня был URL-адрес iframe как https://mydomain/my-app/my-page и столкнулся с той же проблемой, описанной выше, пока я не сменил корпус на https://mydomain/My-App/my-page .