J'ai des applications ASP.NET MVC 4 (STS et RP) qui utilisent WIF 4.5 pour l'authentification. L'application STS a un service de jeton de sécurité personnalisé et Relying Party appelle STS pour obtenir l'authentification, cette partie fonctionne normalement, mais je ne souhaite pas utiliser cookie pour stocker mes données de jeton, donc je configure les événements dans Global.asax afin d'utiliser la session pour stocker les données, mais je ne peux pas déclencher les événements FederatedAuthentication qui feraient le travail. En mode débogage, la méthode Global.asax Application_Start est invoquée et enregistre tous les événements dont j'ai besoin, mais aucun d'entre eux n'est appelé quand ils sont supposés être appelés. Ce qui est étrange, c'est qu'ils travaillaient, mais soudain ils ont arrêté de tirer et je ne sais pas pourquoi, puisque je n'ai rien changé. J'ai mis en place la méthode Application_Error dans Global.asax et je n'ai aucune erreur et il n'y a rien dans les journaux d'événements Windows.Les événements FederatedAuthentication ne se déclenchent pas
Qu'est-ce qui ne va pas dans ma configuration? Comment puis-je enquêter sur le problème?
Web.config
<configuration>
<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>
<authorization>
<deny users="?" />
</authorization>
<authentication mode="None"></authentication>
<httpRuntime targetFramework="4.5" />
<httpModules>
<add name="WSFederationAuthenticationModule" type="System.IdentityModel.Services.WSFederationAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<add name="SessionAuthenticationModule" type="System.IdentityModel.Services.SessionAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</httpModules>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
<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>
</system.webServer>
<system.identityModel>
<identityConfiguration>
<certificateValidation certificateValidationMode="None" />
<audienceUris>
<add value="http://www.rp.com/" />
</audienceUris>
<issuerNameRegistry type="System.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<trustedIssuers>
<add thumbprint="*thumbprint*" name="CertificateName" />
</trustedIssuers>
</issuerNameRegistry>
</identityConfiguration>
</system.identityModel>
<system.identityModel.services>
<federationConfiguration>
<cookieHandler requireSsl="false" />
<wsFederation passiveRedirectEnabled="true" issuer="http://www.sts.com/" realm="http://www.rp.com/" reply="http://www.rp.com/" requireHttps="false" />
</federationConfiguration>
</system.identityModel.services>
</configuration>
Global.asax
protected void Application_Start(object sender, EventArgs e)
{
FederatedAuthentication.FederationConfigurationCreated += OnServiceConfigurationCreated;
FederatedAuthentication.WSFederationAuthenticationModule.SessionSecurityTokenCreated += OnSessionSecurityTokenCreated;
}
private void OnServiceConfigurationCreated(object sender, FederationConfigurationCreatedEventArgs e)
{
}
private void OnSessionSecurityTokenCreated(object sender, SessionSecurityTokenCreatedEventArgs e)
{
}
Ok, je réussi à résoudre une partie du problème en mettant en place mon propre coutume ** WSFederationAuthenticationModule ** et l'enregistrer dans le web.config au lieu du module d'origine. Maintenant, l'événement ** OnSessionSecurityTokenCreated ** est déclenché. Cependant, le problème persiste car je ne sais pas pourquoi le module d'origine ne fonctionne pas comme prévu, mais au moins j'ai une solution de contournement. Merci beaucoup à un gars qui a suggéré cette astuce dans cette question: http://stackoverflow.com/a/14051918/164770 –