【问题标题】:Sitecore SSO via SAML2- AuthenticateRequest not firingSitecore SSO 通过 SAML2-AuthenticateRequest 未触发
【发布时间】:2023-03-05 00:23:01
【问题描述】:

这是我在这里的第一个问题,所以如果我遗漏了什么或需要提供更多信息,请告诉我!

关键细节:

  • C# 4.5
  • IIS 7.5 (Win 2008 R2)
  • Sitecore 6.6 修订版 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>

我的&lt;system.identityModel.services&gt;如下:

<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>

我已经在&lt;system.webServer&gt;&lt;modules&gt;下添加了相关模块(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 以进行测试,但它可以工作
  • Lo​​calSTS 页面 POST 到 reply 属性中指定的 URL,并在表单的 wresult 字段中使用令牌信息

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

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

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

谁能提供一些关于我遗漏的东西的见解,或者任何其他可能阻碍 FAM 检测带有令牌信息的 POST 请求的东西?

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-07
      • 1970-01-01
      • 2013-02-03
      • 2017-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多