DotNetOpenID в iFrame - PullRequest
       9

DotNetOpenID в iFrame

3 голосов
/ 30 августа 2009

Мне было интересно, возможно ли создать RedirectToProvider и отобразить полученную страницу поставщика OpenID в iFrame. Это сделает процесс аутентификации более упорядоченным.

Я использую библиотеку DotNetOpenID в ASP.NET MVC (VB).

Эта следующая часть является своего рода отдельным вопросом, но имеет отношение.

Я использую Ajax.BeginForm для формы входа OpenID, однако RedirectToProvider здесь не работает по некоторым причинам. DotNetOpenId не работает с MVC и AJAX?

Ответы [ 2 ]

3 голосов
/ 31 августа 2009

Да, DotNetOpenId поддерживает iframes, MVC и Ajax. Элемент управления OpenIdAjaxTextBox, который поставляется с библиотекой и показан в одном из примеров, демонстрирует это. Он не использует фреймы для отображения . Он использует их с checkid_immediate для попытки неявного входа в систему без какого-либо взаимодействия с пользователем, что является единственным сценарием iframe, который OpenID намеревается поддерживать.

Метод IAuthenticationRequest.RedirectToProvider внутренне вызывает ASP.NET Response.Redirect, который сам выдает ThreadAbortException, что может быть причиной того, почему он кажется вам неудачным, хотя на самом деле он, вероятно, работает по проекту, но этот дизайн конфликтует с тем, что вы, вероятно, пытаетесь сделать.

Существуют различные подходы, чтобы добиться того, что вы хотите сделать, но, как уже сказал мастер-класс Алекс, существует проблема безопасности с размещением страницы провайдера в iframe. Дело не в том, что RP может получить доступ к содержимому iframe или согласиться с ним, потому что, как сказал EFraim, если в браузере нет ошибок, которые все равно не будут допущены. Две проблемы с ним: Clickjacking и то, что вы обучаете пользователя фишингу, поскольку он, вероятно, будет предоставлять свои учетные данные для входа в свою операционную систему, в то время как URL-адрес RP находится в строке адреса, которая является плохо.

И на самом деле, крупные ОП теперь сознательно отказываются работать, когда они активированы в рамках iframe, поэтому после того, как все будет работать так, как вы хотите, вы, вероятно, будете разочарованы тем, что большинство ваших клиентов выиграли ». не сможет войти.

Также, как вы указали, всплывающие окна, если все сделано правильно, могут помочь сохранить удобство работы с пользователем. Вы можете достичь этого несколькими различными способами, используя DotNetOpenId. Элементы управления ASP.NET, поставляемые с библиотекой, имеют встроенную функцию и могут быть активированы путем установки свойства элемента управления. Но так как вы используете ASP.NET MVC (я думаю), вот как вы можете сделать это самостоятельно:

  1. Когда пользователь нажимает кнопку «Вход» на вашей странице, а не размещает сообщение в текущем окне, используйте Javascript, который открывает всплывающее окно соответствующего размера по URL-адресу, например http://yoursite.com/openid/redirect?id=userSuppliedIdentifier.

  2. Действие Redirect вашего контроллера OpenID будет считывать этот идентификатор, делать OpenIdRelyingParty.CreateRequest для этого идентификатора и return IAuthenticationRequest.RedirectingResponse.AsActionResult() (стиль MVC). Обратите внимание, что вы можете передать свой собственный URL-адрес CreateRequest для URL-адреса returnTo, если вы хотите, чтобы ответ OP возвращался к другому методу на контроллере OpenID.

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

Весь этот процесс полностью автоматизирован в элементах управления ASP.NET, с которыми поставляется DotNetOpenId. К сожалению, ASP.NET MVC нельзя сделать столь же модульным, как веб-формы ASP.NET, чтобы вам не приходилось выполнять всю эту работу самостоятельно. Конечно, образец MVC, с которым поставляется DotNetOpenId, может быть создан для демонстрации поведения всплывающих окон в будущей версии. Если вы хотите, подайте запрос на это .

2 голосов
/ 30 августа 2009

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

...