这是我的第一个问题,如果我遗漏了某些内容或需要提供更多信息,请告诉我们!
主要细节:
我正在尝试将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" />
我看到的行为如下:
reply
属性中指定的网址,其中包含表单wresult
字段中的令牌信息这是问题发生的地方。我的理解是FAM挂钩AuthenticateRequest
事件,然后继续检测安全令牌(通过wa
和wresult
表单字段的存在和值)并解码SSO令牌。
我的问题是这种情况从未发生过 - 我已启用跟踪并覆盖WSFederationAuthenticationModule
进行检查,虽然它第一次正确检测到该事件并调用CreateSignInRequest
和RedirectToIdentityProvider
步骤,后续对站点的POST(包含令牌)不会触发AuthenticateRequest,因此FAM不会检测,创建cookie或为请求分配正确的IPrincipal。
这导致无限循环,其中请求接收401,302被重定向到LocalSTS SSO页面,该页面提交POST,发送到Sitecore SSO页面,其提供401等等。
任何人都可以提供一些我缺少的东西,或其他任何可能妨碍FAM检测其中包含令牌信息的POST请求的内容吗?
答案 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重定向 - 创建循环。