Настраиваемая страница входа для Azure ACS не работает

Я загрузил образец страницы входа с портала ACS для своего приложения, который представляет собой HTML-файл. Затем я настроил свое приложение с помощью WIF, и все заработало отлично.

Поскольку нам нужно обрабатывать и сохранять входящую строку запроса, чтобы эту строку запроса можно было использовать позже после входа пользователя в систему, нам нужно было переместить страницу входа в формате html на страницу aspx.

Проблема в том, что когда я меняю эмитента для WIF в файле web.config на файл aspx, он перестает работать. Когда это работает, это выглядит так:

<certificateValidation certificateValidationMode="None" />
  <federatedAuthentication>
    <wsFederation passiveRedirectEnabled="true" issuer="http://localhost:81/acstest/WebSiteAdvancedACSLoginPageCode.html" realm="http://localhost:81/acstest/" requireHttps="false" />
    <cookieHandler requireSsl="false" />
  </federatedAuthentication>

Но затем, когда я меняю его на свою страницу aspx, куда я только что переместил весь код на странице html, я даже не могу загрузить страницу:

<certificateValidation certificateValidationMode="None" />
  <federatedAuthentication>
    <wsFederation passiveRedirectEnabled="true" issuer="http://localhost:81/acstest/WebSiteAdvancedACSLoginPageCode.aspx" realm="http://localhost:81/acstest/" requireHttps="false" />
    <cookieHandler requireSsl="false" />
  </federatedAuthentication>

Когда я затем запускаю с настроенным файлом aspx, я вижу в скрипаче, что что-то не так, он пытается получить и продолжает получать «объект перемещен сюда:» Это запрос на получение:

GET http://localhost:81/acstest/WebSiteAdvancedACSLoginPageCode.aspx?wa=wsignin1.0&wtrealm=http%3a%2f%2flocalhost%3a81%2facstest%2f&wctx=rm%3d0%26id%3dpassive%26ru%3d%252facstest%252fWebSiteAdvancedACSLoginPageCode.aspx&wct=2011-11-23T09%3a33%3a30Z HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: sv-SE
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Host: localhost:81
Cookie: ACSChosenIdentityProvider-10001951=Google

В конце выдает исключение, что строка запроса слишком длинная. Ошибка и предупреждение запроса:

MODULE_SET_RESPONSE_ERROR_STATUS

URL-адрес авторизации имени модуля

Уведомление AUTHORIZE_REQUEST

HttpStatus 401

HttpReason неавторизованный

HttpSubStatus 0

ErrorCode Åtgärden har slutförts. (0x0)

ConfigExceptionInfo

Любая обратная связь или альтернативное решение приветствуются.


person Fore    schedule 23.11.2011    source источник


Ответы (1)


«Эмитентом» по-прежнему должен быть ACS, а не ваш сайт (если только вы не реализуете свою собственную STS, что не похоже на то, что вы хотите). Эмитент == STS в конфигурации WIF.

Лучший кандидат для сохранения состояния (например, URL-адресов и т. д.) при согласовании токена (которое происходит при перенаправлении) – параметр wctx. Вы можете установить это программно.

Посмотрите на образец № 7 из этой загрузки: http://www.microsoft.com/download/en/details.aspx?id=27289

Глава: http://msdn.microsoft.com/en-us/library/hh446534.aspx из этого руководства: http://msdn.microsoft.com/en-us/library/ff423674.aspx

Код выглядит так (фрагмент):

var returnUrl = GetReturnUrl(context.RequestContext);

// user is not authenticated and it's entering for the first time
var fam = FederatedAuthentication.WSFederationAuthenticationModule;
var signIn = new SignInRequestMessage(new Uri(fam.Issuer), fam.Realm)
                {
                    Context = returnUrl.ToString(),
                    Realm = string.Format("https://localhost/f-shipping.7/{0}", organizationName)
                };

context.Result = new RedirectResult(signIn.WriteQueryString());
person Eugenio Pace    schedule 23.11.2011