2013-11-27 3 views
4

Это мой первый вопрос здесь, поэтому, пожалуйста, дайте мне знать, если я что-то пропустил или вам нужно предоставить дополнительную информацию!Sitecore SSO через SAML2- AuthenticateRequest не срабатывает

Основные детали:

  • C# 4.5
  • IIS 7.5 (Win 2008 R2)
  • Sitecore 6.6 REV 130529

Я пытается связать Sitecore к экземпляру VS2012 LocalSTS предоставленный Visual Studio Identity and Access Tool, после записи в блоге Кевина Бакли (link), которая была написана до того, как WIF был интегрирован в C# 4.5. Я пытаюсь выполнить пассивное поведение RP.

Я обновил пространства имен Microsoft.IdentityModel до System.IdentityModel и System.IdentityModel.Services пространств имен в зависимости от ситуации.

Мой <system.IdentityModel> раздел, как показано ниже:

<system.identityModel> 
    <identityConfiguration> 
     <audienceUris> 
     <add value="http://localhost/" /> 
     </audienceUris> 
     <certificateValidation certificateValidationMode="None" /> 
     <issuerNameRegistry type="System.IdentityModel.Tokens.ValidatingIssuerNameRegistry, System.IdentityModel.Tokens.ValidatingIssuerNameRegistry"> 
     <authority name="LocalSTS"> 
      <keys> 
      <add thumbprint="9B74CB2F320F7AAFC156E1252270B1DC01EF40D0" /> 
      </keys> 
      <validIssuers> 
      <add name="LocalSTS" /> 
      </validIssuers> 
     </authority> 
     </issuerNameRegistry> 
    </identityConfiguration> 

Мой <system.identityModel.services>, как показано ниже:

<system.identityModel.services> 
    <federationConfiguration> 
     <cookieHandler requireSsl="false" /> 
     <wsFederation passiveRedirectEnabled="true" 
    issuer="http://localhost:14691/wsFederationSTS/Issue" 
    realm="http://localhost/" 
    reply="http://localhost/sitecore modules/fedauthenticator/sso" 
    requireHttps="false" /> 
    </federationConfiguration> 
    </system.identityModel.services> 

Я добавил соответствующие модули (WSFederationAuthenticationModule, SessionAuthenticationModule) под <system.webServer><modules>:

<add type="Sitecore.Web.RewriteModule, Sitecore.Kernel" 
     name="SitecoreRewriteModule" /> 
    <add type="Sitecore.Nexus.Web.HttpModule,Sitecore.Nexus" 
     name="SitecoreHttpModule" /> 
    <add name="WSFederationAuthenticationModule" 
     type="System.IdentityModel.Services.WSFederationAuthenticationModule, 
       System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, 
       PublicKeyToken=b77a5c561934e089" 
     preCondition="managedHandler" /> 
    <add name="SessionAuthenticationModule"  
     type="FedAuthenticator.Authentication.WSSessionAuthenticationModule, 
       FedAuthenticator" 
     preCondition="managedHandler" /> 

поведение я вижу, заключается в следующем:

  • Пользователь переходит на страницу, которая защищена Sitecore
  • WIF модуль FAM пожаров и в EndRequest, определяет, что 401 статус возвращается
  • WIF FAM перенаправляет на LocalSTS IdP в соответствии с настройками (с соответствующим запросом)
  • Javascript auto-submits form - Я отключил JS в браузере для тестирования этого, но он работает
  • LocalSTS page POS Ц. к URL, указанный в атрибуте reply с символической информацией в wresult поле формы

Здесь возникает вопрос. Я понимаю, что FAM перехватывает событие AuthenticateRequest, а затем переходит к обнаружению маркера безопасности (через наличие и значения полей формы) и декодирует токен SSO.

Моя проблема заключается в том, что это никогда не происходит - я позволил трассировку и переопределили WSFederationAuthenticationModule проверить, и, хотя он правильно обнаруживает событие в первый раз и вызывает CreateSignInRequest и RedirectToIdentityProvider шаги, последующее сообщение на сайт (содержащий токен) не запускает AuthenticateRequest и, следовательно, FAM не обнаруживает, не создает cookie или не назначает правильное IPrincipal для запроса.

Это приводит к бесконечной петле, когда запрос получает 401, является 302 перенаправлены на страницу LocalSTS SSO, которая представляет, почт на страницу Sitecore SSO, которая обеспечивает 401, и т.д. и т.п.

Можно ли предоставить какое-то понимание того, что мне не хватает, или что-то еще, что может помешать FAM обнаружить запрос POST с информацией о токенах в нем?

ответ

1

Смутно, чтобы ответить на мой собственный вопрос - причина этого заключалась в том, что параметр направлял сообщение POST формы SSO на URL-адрес, на который Sitecore ответил перенаправлением на страницу NotFound (т. Е. Цель POST была разрешена Sitecore не существует).

Поскольку на странице NotFound не было никакой безопасности, AuthenticateRequest не стрелял.

Мне еще предстоит выяснить, почему страница NotFound вызывала перенаправление на страницу единого входа - но по крайней мере сейчас, как только я исправил неправильное значение в поле конфигурации , токен обнаруживается FAM и правильно обработаны для последующих модулей (SAM и т. д.).

Редактировать - нашел причину петли перенаправления

Цикл перенаправления было вызвано ошибочной настройки в web.config, который выглядел, как показано ниже:

<authorization> 
    <deny users="?"/> 
</authorization> 

Это означало, что токен был отправлен на страницу NotFound, которая Sitecore, по-видимому, перехватывает запрос и, следовательно, не запускает FAM, поэтому пользователь не прошел аутентификацию. Это привело к появлению кода ответа 401 (из-за оператора deny), который запускает перенаправление SSO - создание цикла.

Смежные вопросы