2016-12-02 1 views
1

Ich habe versucht, die föderierte Authentifizierung mit meiner bestehenden Asp.Net 3.5-Website zu integrieren, indem ich den Code http://www.wiktorzychla.com/2012/09/forms-authentication-revisited.html verwende. Das Problem ist fam.IsSignInResponse (request) gibt auch nach Erhalt einer gültigen Antwort von der STS (AD FS) falsch aus. GetClaims() ist leicht modifiziert, da es sich in einer separaten Klassenbibliothek befindet. Derselbe Code funktioniert in einer anderen Testanwendung. Ich bin mir nicht sicher, wo es schief geht, bitte hilf mir. Bitte beachten Sie den folgenden Code.STS-Antwort WSFederationAuthenticationModule IsSignInResponse ist immer falsch

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

Antwort

0

Endlich habe ich es herausgefunden. Dies war ein Problem mit der Vertrauensstellung, die in AD FS im Vergleich zur Formularauthentifizierung erstellt wurde.

Im Detail, EndpointReference in der Metadaten-XML war nur der Domänenname der Web-Anwendung (SP), dh https://example.com. Die Site empfing die AD FS-Antwort auf der Homepage (Default.aspx), nicht auf der Seite, die ich konfiguriert habe, das war Login.aspx. Wenn die Startseite die Antwort erhält, wird sie gemäß der Konfiguration der Formularauthentifizierung nicht zur Anmeldung an die Anmeldeseite umgeleitet, da WSFederationAuthenticationModule IsSignInResponse false ist und die Anmeldeseite erneut zur AD FS-URL umleitet. Dies geschah rekursiv.

Ich habe die EndpointReference in https://example.com/Login.aspx geändert und es hat wie erwartet funktioniert.