Событие WSFederationAuthenticationModule.RedirectingToIdentityProvider не вызывается

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

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>

person VoimiX    schedule 19.01.2012    source источник
comment
Вы проверили, установлено ли для атрибутаpassiveRedirectEnabled значение true элемента ‹federatedAuthentication› в файле web.config?   -  person klings    schedule 19.01.2012
comment
Можете ли вы опубликовать раздел microsoft.identityModel вашего web.config? Это должно помочь диагностировать ситуацию.   -  person Garrett Vlieger    schedule 19.01.2012
comment
Я добавил содержимое раздела microsoft.identityModel   -  person VoimiX    schedule 20.01.2012
comment
Вы когда-нибудь догадывались об этом?   -  person iano    schedule 11.04.2012
comment
Я был удивлен, увидев, что сегодня в моем приложении методы вызываются автоматически. Я всегда регистрировал их на мероприятиях. Для них также можно найти события: FederatedAuthentication.FederationConfigurationCreated +=FederatedAuthentication_FederationConfigurationCreated;   -  person Poul K. Sørensen    schedule 29.05.2013


Ответы (7)


В вашем файле 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"/>

В элементе 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>

Если ваши проблемы повторятся после этих изменений, вы можете реализовать свой собственный модуль аутентификации, полученный из 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 с соответствующим пространством имен и подписью сборки. Таким образом, вы можете перехватывать звонки в своем делегате.

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

Растко

person Rastko    schedule 27.12.2012

Добавьте в файл 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

person iano    schedule 10.04.2012

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

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

Нашел свой ответ здесь.

person Shahin Dohan    schedule 03.04.2013

Похоже, вы можете пропустить 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" />

Дополнительные сведения см. здесь.

person Garrett Vlieger    schedule 20.01.2012

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

person Carl G    schedule 08.08.2013

Моя проблема заключалась в том, что в разделы 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, запускались.

person bojingo    schedule 15.08.2013

Для людей, которые подклассифицируют 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
    }
}
person Martijn B    schedule 28.01.2015