2016-07-26 32 views
2

Ich benutze UseOpenIdConnectAuthentication Middleware für ASP.Net Core-Anwendung zur Authentifizierung gegen Dells Cloud Access Manager Token-Anbieter (Setup zur Bereitstellung von OpenId/OAuth2-Authentifizierung). Folgendes ist der Code:OpenIdConnectAuthenticationHandler: message.State ist null oder leer

 app.UseCookieAuthentication(new CookieAuthenticationOptions 
     { 
      AutomaticAuthenticate = true, 
      AutomaticChallenge = true, 
      AuthenticationScheme = "ClientCookie", 
      CookieName = CookieAuthenticationDefaults.CookiePrefix + "ClientCookie", 
      ExpireTimeSpan = TimeSpan.FromMinutes(5), 
      LoginPath = new PathString("/signin"), 
      LogoutPath = new PathString("/signout") 
     }); 

     app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions 
     { 
      RequireHttpsMetadata = false, 
      SaveTokens = true, 
      ClientId = "XYZClient_Id", 
      ClientSecret = "XYZ_ClientSecret", 
      ResponseType = OpenIdConnectResponseType.Code, 
      PostLogoutRedirectUri = "https://example.com", 
      Configuration = new OpenIdConnectConfiguration { 
       AuthorizationEndpoint = "https://CAM.COM/CloudAccessManager/RPSTS/OAuth2/Default.aspx", 
       TokenEndpoint = "https://CAM.COM/CloudAccessManager/RPSTS/OAuth2/Token.aspx", 
       UserInfoEndpoint = "https://CAM.COM/CloudAccessManager/RPSTS/OAuth2/User.aspx", 
       Issuer= "urn:CAM.COM/CloudAccessManager/RPSTS", 
      } 
     }); 

Aber ich bin an einem Punkt für ein paar Stunden jetzt fest. Ich erhalte den folgenden Fehler:

SecurityTokenInvalidSignatureException: IDX10500: Signaturvalidierung fehlgeschlagen. Es gibt keine Sicherheitsschlüssel verwenden, um die Signatur

Ich erhalte Code und Zustand zurück in URL zu validieren Abfragezeichen https://example.com/signin-oidc?code=somecode&state=somestate

Jede Art von Führung geschätzt wird.


UPDATE Added Emittent Signing Schlüssel:

TokenValidationParameters = new TokenValidationParameters 
       { 
        IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration.GetValue<string>("AppSettings:ClientSecret"))) 
       } 

Antwort

3

Der Fehler Sie sehen durch die Tatsache verursacht wird Sie nicht die OpenID Connect provider configuration discovery feature von der OIDC Middleware angeboten verwenden, die es erlaubt abrufen die kryptographischen Schlüssel, die zum Signieren von Identitätstoken verwendet werden.

Wenn Ihr Provider diese Funktion unterstützt, entfernen Sie den gesamten Configuration Knoten und setzen Sie stattdessen Authority. Alle Endpunkte sollten automatisch für Sie registriert werden. Wenn diese Funktion nicht unterstützt wird, müssen Sie die Signaturschlüssel manuell zu OpenIdConnectOptions.TokenValidationParameters.IssuerSigningKeys hinzufügen.

+0

Das hat viel Zeit gespart und kann mit dem manuellen Hinzufügen der Signaturschlüssel beginnen, da mein Provider keinen Endpunkt für die Konfigurationsermittlung bereitstellt. Auch danke für die sofortige Antwort – CodeZero

+0

Wenn die Antwort hilfreich ist, fühlen Sie sich frei, es zu erhöhen/markieren Sie es als akzeptiert;) – Pinpoint