Yahoo DotNetAutho для входа в систему единого входа: запретить Yahoo создавать всплывающее окно

#.net #openid #dotnetopenauth

#.net #OpenID #dotnetopenauth

Вопрос:

Я использую библиотеку DotNetOpenAuth для создания входа в систему единого входа для Google и Yahoo. Я перенаправляю провайдеру программно, используя запрос.RedirectToProvider() когда пользователь нажимает на мою кнопку LinkButton (я использую пользовательский элемент управления входом).

Это отлично работает для Google и Yahoo во всех браузерах. Проблема в том, что Yahoo, похоже, думает, что оно открывается во всплывающем окне, и изменяет размер всего окна.

Как мне установить тип пользовательского интерфейса в DotNetOpenAuth, чтобы предотвратить такое поведение? Похоже, что в UIModes есть только режим всплывающего окна?

Редактировать: на самом деле я не использовал расширение UIRequest. Это было частью моих усилий по отладке.

Код запроса выглядит следующим образом:

 Dim OpenIDEndpoint As String = WellKnownProviders.Yahoo.ToString, OpenID As OpenIdRelyingParty = New OpenIdRelyingParty
    Dim LoginRequest As IAuthenticationRequest = OpenID.CreateRequest(OpenIDEndpoint)

    Dim Fields As ClaimsRequest = New ClaimsRequest()

    Fields.Email = DemandLevel.Require
    Fields.FullName = DemandLevel.Require
    Fields.Nickname = DemandLevel.Require
    Fields.BirthDate = DemandLevel.Require
    Fields.Gender = DemandLevel.Require

    LoginRequest.AddExtension(Fields)
    LoginRequest.RedirectToProvider()
  

Ответ №1:

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

Я ожидаю, что это решит проблему с изменением размера.

Комментарии:

1. Это действительно странно, я на самом деле не использовал расширение UIRequest (я только пытался исправить поведение с его помощью после возникновения проблемы). Я не знаю, почему Yahoo предполагает, что это во всплывающем окне. Где-нибудь еще я мог случайно установить это значение?

Ответ №2:

Чувствовал, что это было лучше представлено в ответе, чем в комментарии:

Даже страница входа в систему Yahoo в StackOverflow имеет ту же проблему!

При проверке ссылки для входа в систему единого входа Yahoo я заметил, что страница входа в систему единого входа Yahoo, похоже, оптимизирована для входа во всплывающие окна. На странице есть этот JS:

 <script type="text/javascript">
var isPopup = "true"; //<-- Note this
if (window.opener || isPopup) {
  var Dom = YAHOO.util.Dom;
  var Event = YAHOO.util.Event;

  (function() {
    if (Dom.getViewportWidth() < 500 || Dom.getViewportHeight() < 675) {
        window.resizeTo(500,675);
    }
  })();

...
  

Несмотря на то, что SSO не использует всплывающие окна, Yahoo, похоже, устанавливает значение isPopup в true. Я не знаю, является ли это ошибкой со стороны Yahoo или какой-либо ошибкой в DotNetOpenAuth. Я бы приветствовал мнение Эндрю по этому поводу?

Обновить:

Странно, SSO съел мое обновление.

http://developer .yahoo.com/oauth/guide/oauth-userauth.html — Yahoo, по-видимому, оптимизировала свою страницу входа в систему единого входа ТОЛЬКО для всплывающих окон. Изменение размера окна, вероятно, является результатом этого.