当前位置 : 主页 > 手机开发 > 其它 >

Sitecore SSO通过SAML2- AuthenticateRequest未触发

来源:互联网 收集:自由互联 发布时间:2021-06-19
这是我的第一个问题,如果我遗漏了某些内容或需要提供更多信息,请告诉我! 关键细节: C#4.5 IIS 7.5(Win 2008 R2) Sitecore 6.6 rev 130529 我试图将Sitecore链接到Visual Studio Identity and Access Tool提供
这是我的第一个问题,如果我遗漏了某些内容或需要提供更多信息,请告诉我!

关键细节:

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

我在< 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页面在回复属性中指定的URL,在表单的wresult字段中包含令牌信息

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

我的问题是这种情况永远不会发生 – 我已经启用了跟踪并覆盖了WSFederationAuthenticationModule来检查,虽然它第一次正确检测到事件并调用了CreateSignInRequest和RedirectToIdentityProvider步骤,但后续对站点的POST(包含令牌)却没有激活AuthenticateRequest,因此FAM不会检测,创建cookie或为请求分配正确的IPrincipal.

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

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

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

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

我还没有弄清楚为什么NotFound页面导致重定向回到SSO页面 – 但至少现在,一旦我在响应配置​​字段中更正了不正确的值,FAM会检测到令牌并正确处理以供日后使用模块(SAM等).

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

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

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

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

网友评论