2013-07-09 67 views
6

我不知道爲什麼,但我FederatedAuthentication.SessionAuthenticationModule被解析爲NULL,並撞毀我的應用程序,當我嘗試運行我的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

爲什麼你添加三個加SessionAuthenticationModule之前 '刪除' 的節點? –

+0

如果該設置被添加到.config鏈中的其他位置。刪除然後添加我以前見過,因爲我的代碼不工作,我正在嘗試一切... – user1265146

回答

11

我與已經工作的項目和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的樣品。

+0

是的..我發現了卡西尼問題只是偶然的另一個開發人員使用IIS,並需要在項目中本地更改端口,並將其簽入TFS :) – user1265146

+2

IIS * Express *(或完整的IIS)適用於我,而不是Visual Studio Development Server(「Cassini」)。 – tjrobinson

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