7

我不确定为什么,但是当我尝试运行 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 没有正确初始化?

4

3 回答 3

14

我对已经工作的项目和 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 文章以获取示例。

于 2013-07-16T11:55:53.507 回答
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>
于 2015-03-06T23:32:36.987 回答
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>
于 2018-01-19T17:43:36.283 回答