2012-01-19 3 views
4

У меня есть 2 события в моем Global.asax.cs файлсобытия WSFederationAuthenticationModule.RedirectingToIdentityProvider не называется

WSFederationAuthenticationModule_SecurityTokenValidated и WSFederationAuthenticationModule_RedirectingToIdentityProvider

WSFederationAuthenticationModule_RedirectingToIdentityProvider не вызывается Wif двигателя. Зачем?

public class MvcApplication : System.Web.HttpApplication 
{ 
    void WSFederationAuthenticationModule_SecurityTokenValidated(object sender, SecurityTokenValidatedEventArgs e) 
    { 
     FederatedAuthentication.SessionAuthenticationModule.IsSessionMode = true; 
    } 


    void WSFederationAuthenticationModule_RedirectingToIdentityProvider(object sender, RedirectingToIdentityProviderEventArgs e) 
    { 
     //some code 
    } 
} 

Это раздел microsoft.identityModel в web.config

<microsoft.identityModel> 
     <service saveBootstrapTokens="true"> 
      <audienceUris mode="Never"> 

      </audienceUris> 
      <federatedAuthentication> 
      <wsFederation passiveRedirectEnabled="true" issuer="http://localhost/dss.web.sts.tokenbaker/" realm="http://localhost/dss.web.frontend" requireHttps="false" /> 
      <cookieHandler requireSsl="false" /> 



      </federatedAuthentication> 

      <issuerNameRegistry type="Microsoft.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"> 
      <trustedIssuers> 
       <add thumbprint="308efdee6453fff68c402e5eceee5b8bb9eaa619" name="servcert" /> 

      </trustedIssuers> 
      </issuerNameRegistry> 
     </service> 
     </microsoft.identityModel> 
+0

Вы можете разместить раздел microsoft.identityModel вашей web.config? Это должно помочь диагностировать ситуацию. –

+0

Я добавил содержание microsoft.identityModel раздел – VoimiX

+0

Вы когда-нибудь это выясняли? – iano

ответ

0

Проверили ли вы, что passiveRedirectEnabled атрибут установлен верно на элементе в вашем web.config?

+1

yes, passiveRedirectEnabled = "true" – VoimiX

0

Похоже, что в вашей конфигурации может отсутствовать WSFederationAuthenticationModule. Убедитесь, что у вас есть это в system.webServer\modules:

<add name="WSFederationAuthenticationModule" type="Microsoft.IdentityModel.Web.WSFederationAuthenticationModule, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler" /> 

И это в system.web\httpModules:

<add name="WSFederationAuthenticationModule" type="Microsoft.IdentityModel.Web.WSFederationAuthenticationModule, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> 

Read here для получения дополнительной информации.

+1

У меня уже есть эти строки в моем web.config :( – VoimiX

3

Добавьте следующее к Global.asax.cs:

void Application_Start() 
{ 
    FederatedAuthentication.ServiceConfigurationCreated += OnServiceConfigurationCreated; 
} 


void OnServiceConfigurationCreated(object sender, ServiceConfigurationCreatedEventArgs e) 
{ 
    FederatedAuthentication.WSFederationAuthenticationModule.RedirectingToIdentityProvider += WSFederationAuthenticationModule_RedirectingToIdentityProvider; 
} 

Кредит https://stackoverflow.com/a/9207505/13932

7

Вы отсутствуют следующие строки в файле web.config:

In 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"/> 

В элементе system.webServer

<modules> 
    <remove name="FormsAuthentication" /> 
    <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="System.IdentityModel.Services.SessionAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler" /> 
</modules> 

Ваша аудитория Урис пуст. Вы должны указать свое веб-приложение, чтобы оно могло использовать эту функцию. Итак, добавьте следующую строку:

<audienceUris> 
    <add value="http://localhost/dss.web.frontend"/> 
    </audienceUris> 

Если ваши проблемы reamined после этого изменения, вы можете реализовать свой собственный модуль аутентификации, полученный из WSFederationAuthenticationModule. Что-то вроде этого:

public class CustomAuthenticationModule : WSFederationAuthenticationModule 
{ 
    public CustomAuthenticationModule() 
    { 
     base.SecurityTokenReceived += CustomAuthenticationModule_SecurityTokenReceived; 
    } 

    public void CustomAuthenticationModule_SecurityTokenReceived(object sender, SecurityTokenReceivedEventArgs e) 
    { 

    } 

    protected override void OnAuthenticateRequest(object sender, EventArgs args) 
    { 
     base.OnAuthenticateRequest(sender, args); 
    } 
} 

, а затем просто в изменении конфигурации вместо WSFederationAuthenticationModule поместить CustomAuthenticationModule с соответствующим пространством имен и сборки подписи. Таким образом, вы можете перехватывать вызовы в своем делегате.

Надеюсь, это полезно для вас.

Rastko

2

Убедитесь, что вы ссылки WSFederationAuthenticationModule из нового пространства имен System.IdentityModel.Services.

В моем случае я все еще ссылался на него из старого пространства имен Microsoft.IdentityModel.Web после переноса решения на .NET 4.5.

Обнаружили мой ответ here.

0

Необходимо проверить, что вы ссылаетесь на согласованную сборку между модулем web.config и оператором Global.asax.cs using. Так как тип RedirectingToIdentityProviderEventArgs существует как в System.IdentityModel.Services, так и в Microsoft.IdentityModel.Web (с .NET 4.5), вы можете добавить модуль из одной сборки в web.config, но ссылаясь на аргумент события из другой сборки в Global.asax.cs. Я думаю, что это провалится.

0

Моя проблема заключалась в том, что у меня были добавлены следующие модули для разделов system.web/httpModules и system.webServer/modules.

<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="System.IdentityModel.Services.SessionAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler" /> 

Удаление элементов из system.web/HttpModules разделе решается вопрос и все события, прикрепленные к WSFederationAuthenticationModule инстанции были уволены.

0

Для людей, которые к югу от причислять WSFederationAuthenticationModule и для этого изменения регистрационного имени модуля в web.config и с помощью автоматической проводки подхода (внутри global.asax.cs) вы также должны изменить начало имени методы.

Например, если вы следующие в system.webServer\modules

<add name="CustomWsFedModule" type="SomeLib.CustomWSFederationAuthenticationModule" preCondition="managedHandler" /> 

Вам нужно будет следующее внутри global.asax.cs

public class MvcApplication : System.Web.HttpApplication 
{ 
    void CustomWsFedModule_RedirectingToIdentityProvider(object sender, RedirectingToIdentityProviderEventArgs e) 
    { 
     //some code 
    } 
} 
Смежные вопросы