2016-12-02 2 views
1

J'ai essayé d'intégrer l'authentification fédérée avec mon site Web Asp.Net 3.5 existant en utilisant le code de http://www.wiktorzychla.com/2012/09/forms-authentication-revisited.html. Le problème est fam.IsSignInResponse (request) donne false même après avoir reçu une réponse valide du STS (AD FS). GetClaims() est légèrement modifié, car il se trouve dans une bibliothèque de classes distincte. Le même code fonctionne dans une autre application de test. Je ne sais pas où ça va mal, aidez-moi s'il vous plaît. S'il vous plaît voir le code ci-dessous.Réponse STS WSFederationAuthenticationModule IsSignInResponse est toujours false

public List<ClaimEntity> GetClaims() 
     { 
      logger.Info("Started executing GetClaims()"); 
      List<ClaimEntity> claims = new List<ClaimEntity>(); 
      // sam is configured in web.config 
      var sam = FederatedAuthentication.SessionAuthenticationModule; 
      logger.Info("Declaring sam"); 
      // fam is not 
      var fam = new WSFederationAuthenticationModule(); 
      logger.Info("Declaring fam"); 
      //fam.FederationConfiguration = FederatedAuthentication.FederationConfiguration; 
      fam.ServiceConfiguration = FederatedAuthentication.ServiceConfiguration; 
      logger.Info("Assigning ServiceConfiguration to fam"); 
      var request = thisContext.Request; 

      // is this the response from the STS 
      if (!fam.IsSignInResponse(request)) 
      { 
       // no 
       logger.Info("fam.IsSignInResponse => No"); 
       // the STS 
       fam.Issuer = _IssuerSTSSpec.Issuer; 
       logger.Info("IssuerUrl= " + _IssuerSTSSpec.Issuer); 
       // the return address 
       fam.Realm = thisContext.Request.Url.AbsoluteUri; 
       logger.Info("Assigning fam.Realm= " + thisContext.Request.Url.AbsoluteUri); 
       logger.Info("Creating SignInRequest..."); 
       var req = fam.CreateSignInRequest(string.Empty, null, false);     
       logger.Info("Redirecting to the issuer..."); 
       logger.Info("Request to STS: "+ req.WriteQueryString().ToString()); 
       // go to STS 
       thisContext.Response.Redirect(req.WriteQueryString()); 

      } 
      else 
      { 
       // yes 
     ----------- 
     ----------- 

      } 
      logger.Info("Returning the claims"); 
      return claims; 
     } 

Répondre

0

Enfin, je l'ai compris. Il s'agissait d'un problème lié à l'approbation créée dans AD FS par rapport à l'authentification par formulaire.

En détail, EndpointReference dans le métadonnées xml était juste le nom de domaine de l'application Web (SP), c'est-à-dire https://example.com. Le site recevait la réponse AD FS dans la page d'accueil (Default.aspx), pas dans la page que j'ai configurée, c'était Login.aspx. Lorsque la page d'accueil reçoit la réponse, elle redirige vers la page de connexion conformément à la configuration d'authentification du formulaire, non comme une réponse de connexion, puisque WSFederationAuthenticationModule IsSignInResponse est false, la page de connexion redirige à nouveau vers l'URL AD FS. Cela arrivait récursivement. J'ai changé le EndpointReference à https://example.com/Login.aspx et il a commencé à fonctionner comme prévu.