Пользовательская страница входа в систему Azure ACS не работает - PullRequest
2 голосов
/ 23 ноября 2011

Я загрузил пример страницы входа в систему с портала 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, я вижу в fiddler, что что-то не так, он пытается получить и продолжает получать "объект перемещен сюда:" Это запрос get:

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

ModuleName UrlAuthorization

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

HttpStatus 401

HttpReason Несанкционированный

HttpSubStatus 0

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

ConfigExceptionInfo

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

1 Ответ

3 голосов
/ 23 ноября 2011

"Эмитентом" по-прежнему должен быть ACS, а не ваш сайт (если только вы не внедрили свой собственный STS, который выглядит не так, как вы хотите).Issuer == 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());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...