我不确定为什么但是当我尝试运行我的ClaimsTransformer()模块时,我的FederatedAuthentication.SessionAuthenticationModule解析为NULL并且崩溃我的应用程序:
public void EstablishSession(ClaimsPrincipal principal)
{
var sessionToken = new SessionSecurityToken(principal, TimeSpan.FromHours(8))
{
IsPersistent = false, // make persistent
IsReferenceMode = true // cache on server
};
FederatedAuthentication.SessionAuthenticationModule.WriteSessionTokenToCookie(sessionToken);
// FederatedAuthentication.SessionAuthenticationModule == null and I throw an error :(
}
这是我的web.config中的内容:
<configSections>
<section name="system.identityModel" type="System.IdentityModel.Configuration.SystemIdentityModelSection, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<section name="system.identityModel.services" type="System.IdentityModel.Services.Configuration.SystemIdentityModelServicesSection, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
</configSections>
<system.web>
<authentication mode="None" />
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<remove name="RoleManager" />
<remove name="FormsAuthentication" />
<remove name="SessionAuthenticationModule" />
<add name="SessionAuthenticationModule" type="System.IdentityModel.Services.SessionAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</modules>
</system.webServer>
<system.identityModel>
<identityConfiguration>
<claimsAuthenticationManager type="Web.Infrastructure.Authentication.ClaimsTransformer, Web" />
</identityConfiguration>
</system.identityModel>
<system.identityModel.services>
<federationConfiguration>
<cookieHandler requireSsl="false" />
</federationConfiguration>
</system.identityModel.services>
这让我发疯,因为我在一个(概念验证)项目中运行的代码没有任何问题,并且出现了我需要使这个功能正常工作,但出于某些奇怪的原因,当我尝试实现我们的真实项目,我的FederatedAuthentication.SessionAuthenticationModule始终为NULL。
我在这里缺少什么?有任何想法吗?为什么SessionAuthenticationModule没有正确初始化?
答案 0 :(得分:12)
我对已经工作的项目和FederatedAuthentication.WSFederationAuthenticationModule几乎有相同的行为。
问题解决了我从IIS Express切换到完整IIS(项目文件的错误合并)。
此外,您可以尝试将此模块不仅添加到某个部分,还可以:
<system.web>
<httpModules>
<add name="SessionAuthenticationModule" type="System.IdentityModel.Services.SessionAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
您可以参考此MSDN article获取样本。
答案 1 :(得分:1)
我遇到了这个问题,只是通过在web.config中添加以下内容解决了这个问题。如果其他人遇到同样的问题,值得一试。
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<remove name="FormsAuthenticationModule" />
<add name="SessionAuthenticationModule" type="System.IdentityModel.Services.SessionAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"></add>
</modules>
</system.webServer>
答案 2 :(得分:0)
检查web.config
:
<configSections>
<section name="system.identityModel" type="System.IdentityModel.Configuration.SystemIdentityModelSection, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<section name="system.identityModel.services" type="System.IdentityModel.Services.Configuration.SystemIdentityModelServicesSection, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
</configSections>
<system.webServer>
<modules>
<add name="SessionAuthenticationModule"
type="System.IdentityModel.Services.SessionAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</modules>
</system.webServer>
<system.identityModel.services>
<federationConfiguration>
<cookieHandler requireSsl="false" />
</federationConfiguration>
</system.identityModel.services>