2

Ich benutze Identity Server 4, um meine APIs (Impliziter Datenflussmodus) zu schützen, auf die Angular Application zugreift. Alles funktioniert gut, aber in bestimmten Zeiträumen wurde das Access Token bereits vor seinem Ablauf ungültig.Bearer wurde nicht authentifiziert: Signaturvalidierung fehlgeschlagen

Konfiguration:

Hier ist die Identity Server Startup-Datei:

var identityBuilder = services.AddIdentityServer().AddInMemoryStores().SetTemporarySigningCredential(); 

identityBuilder.AddInMemoryScopes(identitySrvConfig.GetScopes()); 
identityBuilder.AddInMemoryClients(identitySrvConfig.GetClients()); 

die APIs Schutz:

app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions 
     { 
      Authority = identityOptions.Authority, 
      ScopeName = "userProfile_api", 


      RequireHttpsMetadata = false 
     }); 

Investigation:

Die Frage war der Träger nicht

Nach einigen Untersuchungen
Bearer was not authenticated. Failure message: IDX10501: Signature validation failed. Unable to match 'kid': 'e4f3534e5afd70ba74c245fe2e39c724', token 

authentifiziert wurde, scheint es, dass Identitätsserver einen neuen Schlüssel generiert, die die Signaturprüfung verursacht wurde zum Scheitern verurteilt.

enter image description here

Im Protokoll kann ich sehen, wenn die beiden Warnereignisse am Ende passieren, dann sehe ich „Repository enthält keinen tragfähige Standardschlüssel“ und „ein neuer Schlüssel soll den Ring hinzugefügt werden“

Fragen

Warum sollte es keine ein Schlüssel zu jeder Zeit sein, wenn der Schlüssel Lebensdauer fast 3 Monate ist sogar vorübergehende Unterzeichnung (SetTemporarySigningCredential) ich verwende und ich bin neu zu starten den Server nicht?

Creating key {a2fffa4a-345b-4f3b-bae7-454d567a1aee} with creation date 2017-03-03 19:15:28Z, activation date 2017-03-03 19:15:28Z, and expiration date 2017-06-01 19:15:28Z. 

Wie kann ich dieses Problem lösen?

+0

Holen Sie sich ein echtes Signaturzertifikat anstelle des temporären - und testen Sie es erneut. – leastprivilege

+0

starten Sie auch das API-Projekt neu? Ich denke, dass diese Middleware das Entdeckungsdokument zwischenspeichert. Ich kann mich irren. – Lutando

Antwort

1

Durch das Erstellen eines selbstsignierenden Zertifikats und das Entfernen der temporären Signierung auf dem Identitätsserver wurde das Problem behoben.

var signingCertificate = new X509Certificate2("ReplaceByCertificatePath, "ReplaceByPasswordCertificate"); 
var identityBuilder = services.AddIdentityServer().AddInMemoryStores().SetSigningCredential(signingCertificate); 

identityBuilder.AddInMemoryScopes(IdentitySrvConfig.GetScopes()); 
identityBuilder.AddInMemoryClients(IdentitySrvConfig.GetClients()); 
+0

Warum Temp-Signing nicht funktioniert? Wird das irgendwo im Doc erwähnt? – stt106

+0

Es funktioniert, aber manchmal Tokens waren noch vor seinem Ablauf ungültig. Dies wurde Wochen nach der Verwendung des Temp-Signings bemerkt und war kein einfacher Fang. – Coding

+0

Ich habe das gleiche Problem, z. Token ist vor Ablauf abgelaufen. Warum hat das Temp-Signing das verursacht, wenn Sie das wissen? – stt106

Verwandte Themen