Sitecore SSO通过SAML2- AuthenticateRequest未触发

时间:2013-11-27 04:51:28

标签: sitecore single-sign-on saml-2.0

这是我的第一个问题,如果我遗漏了某些内容或需要提供更多信息,请告诉我们!

主要细节:

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

我正在尝试将Sitecore链接到Visual Studio Identity and Access Tool提供的VS2012 LocalSTS实例,之后是Kevin Buckley(link)的博客文章,该文章是在WIF集成到C#4.5之前编写的。我正在尝试执行被动 RP行为。

我已根据需要将Microsoft.IdentityModel命名空间更新为System.IdentityModelSystem.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>

我在<system.webServer><modules>下添加了相关模块(WSFederationAuthenticationModule,SessionAuthenticationModule):

   <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自动提交表单 - 我已经在浏览器中禁用了JS来测试它,但它可以正常工作
  • LocalSTS页面发送到reply属性中指定的网址,其中包含表单wresult字段中的令牌信息

这是问题发生的地方。我的理解是FAM挂钩AuthenticateRequest事件,然后继续检测安全令牌(通过wawresult表单字段的存在和值)并解码SSO令牌。

我的问题是这种情况从未发生过 - 我已启用跟踪并覆盖WSFederationAuthenticationModule进行检查,虽然它第一次正确检测到该事件并调用CreateSignInRequestRedirectToIdentityProvider步骤,后续对站点的POST(包含令牌)不会触发AuthenticateRequest,因此FAM不会检测,创建cookie或为请求分配正确的IPrincipal。

这导致无限循环,其中请求接收401,302被重定向到LocalSTS SSO页面,该页面提交POST,发送到Sitecore SSO页面,其提供401等等。

任何人都可以提供一些我缺少的东西,或其他任何可能妨碍FAM检测其中包含令牌信息的POST请求的内容吗?

1 个答案:

答案 0 :(得分:1)

令人尴尬的是,回答我自己的问题 - 发生这种情况的原因是response参数将SSO表单POST指向Sitecore响应的URL,重定向到NotFound页面(即POST目标)由Sitecore解决不存在)。

由于NotFound页面没有任何安全性,因此AuthenticateRequest未触发。

我还没有解决为什么NotFound页面导致重定向回到SSO页面 - 但至少现在,一旦我更正了response配置字段中的错误值,令牌被检测到FAM并为以后的模块(SAM等)正确处理。

编辑 - 找到了重定向循环的原因

重定向循环是由web.config中的错误设置引起的,如下所示:

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

这意味着令牌被发布到NotFound页面,Sitecore显然拦截了请求,因此没有触发FAM,因此用户未经过身份验证。这导致401响应代码(由于deny语句)启动了SSO重定向 - 创建循环。