Ich habe eine asp.net Core 3.1-App mit AD-Authentifizierung, die gut funktioniert. Wir migrieren es zu einem neuen Infrastruktur-Setup mit einem neuen Satz von CI/CD-Pipelines, die Terraform verwenden. Nach der erneuten Bereitstellung schlägt es mit dem obigen Fehler fehl (vollständiger Stack-Trace unten). Irgendeine Idee, was es verursachen könnte?
Es verwendet einen containerisierten Build, sodass theoretisch alles gleich sein sollte, abgesehen von den Azure-Komponenten. Da der Fehler mit der Authentifizierung/Autorisierung zu tun hat, habe ich die AD-App-Registrierung sehr genau überprüft. Ich glaube, ich habe es mit Terraform so nah wie möglich bekommen. Könnte es eine Besonderheit bei der App-Registrierung sein, dass Terraform nicht unterstützt wird? Ich verknüpfe die beiden App-Manifeste (ohne unternehmensspezifische Daten). Ich mache auch einen detaillierten Vergleich aller Unterschiede unter dem Stack-Trace.
AD-App-Manifest (alt, funktioniert): https://drive.google.com/file/d/187LFczxaReqZLxDrlv7SoWA8nEccUqOj/view?usp=sharing
AD-App-Manifest (neu, defekt): https://drive.google.com /file/d/1a0ygOo7MvBt6enro3J5DaBvj6lP9HzH6/view?usp=sharing
Zusätzliche Informationen, die relevant sein könnten – die App verwendet Swagger, die aus irgendeinem Grund über eine eigene App-Registrierung verfügt. Ich habe diesen Aspekt noch nicht in vergleichbarer Detailliertheit untersucht
Überprüfung der Unterschiede:
- answerUrlsWithType - Ich vermute, dies wird durch den Parameter "redirect_uris" in Terraform geregelt, wodurch ich ihn nicht für Apps vom Typ "api" ändern kann, nur für Web, Spa und public_client
- signInUrl - dies scheint im Terraform-Modul überhaupt nicht zu existieren, es ist wahrscheinlich eine Kopie der obigen (die Werte sind in der Legacy-App dieselben).
- acceptMappedClaims – endet als „false", selbst wenn ich null in das Terraform-Skript fest kodiere
- optionalClaims - null v ein Objekt mit 3 leeren Arrays; Ich kann es anscheinend nicht dazu bringen, letzteres mit Terraform auszuspucken
Das scheint es zu sein - die restlichen Unterschiede scheinen IDs und Namen zu sein. Ich kann mir nichts anderes vorstellen, was sich zwischen den beiden Umgebungen unterscheidet. Es befindet sich in zwei verschiedenen Azure-Abonnements (derselbe AD-Mandant) und alle anderen Abhängigkeiten sind unterschiedlich (Speicher, SQL-Datenbank, Azure Service Bus, Azure Search usw.), aber wenn es ein Problem mit diesen gäbe, würde ich erwarten, dass der Fehler dasselbe anzeigt.
Vollständiger Stack-Trace:
Ausnahme beim Anwendungsstart: System.InvalidOperationException: Die erforderlichen Dienste konnten nicht gefunden werden. Bitte fügen Sie alle erforderlichen Dienste hinzu, indem Sie „IServiceCollection.AddAuthorization" innerhalb des Aufrufs von „ConfigureServices(...)" im Startcode der Anwendung aufrufen.
unter Microsoft.AspNetCore.Builder.AuthorizationAppBuilderExtensions.VerifyServicesRegistered (IApplicationBuilder-App) unter Microsoft.AspNetCore.Builder.AuthorizationAppBuilderExtensions.UseAuthorization (IApplicationBuilder-App) unter Projektname.WebApi.Startup.DefaultHttpPipeline (IApplicationBuilder-App) in /app/projectname.WebApi/Startup. cs:Zeile 360 bei Projektname.WebApi.Startup.ConfigureDevelopment(IApplicationBuilder-App) in /app/Projektname.WebApi/Startup.cs:Zeile 317 bei System.RuntimeMethodHandle.InvokeMethod(Objektziel, Objekt[]-Argumente, Signatur-Sig, boolescher Konstruktor, Boolean wrapExceptions) bei System.Reflection.RuntimeMethodInfo.Invoke (Object obj, BindingFlags invokeAttr, Binder-Binder, Object[]-Parameter, CultureInfo-Kultur)
bei Microsoft.AspNetCore.Hosting.ConfigureBuilder.Invoke (Objektinstanz, IApplicationBuilder-Builder) bei Microsoft.AspNetCore.Hosting.ConfigureBuilder.<>c__DisplayClass4_0.b__0(IApplicationBuilder-Builder) bei Microsoft.AspNetCore.Hosting.ConventionBasedStartup.Configure (IApplicationBuilder-App) bei Microsoft.AspNetCore.HostFilteringStartupFilter.<>c__DisplayClass0_0.b__0(IApplicationBuilder-App) bei Microsoft.AspNetCore.Hosting.WebHost.BuildApplication()
Nächste Schritte, die ich geplant habe zu versuchen:
- Holen Sie sich die Client-ID und das Client-Geheimnis der neuen App-Registrierung (bereitgestellt über Terraform) und fügen Sie sie manuell in die alte App ein (es ist derselbe AD-Mandant, daher sollten keine Zugriffsprobleme auftreten). Wenn wir denselben Fehler erhalten, bestätigt dies, dass das Problem bei der App-Registrierung liegt.
- Kommentieren Sie alles aus, was mit Prahlerei zu tun hat, um sicherzustellen, dass es nicht daran liegt
- Das Ganze auf.net 6 migrieren - muss sowieso gemacht werden, vielleicht bekommen wir eine bessere Fehlermeldung
Lösung des Problems
Endlich herausgefunden, dass es einen falschen Wert für die Swagger-App-Registrierungs-Client-ID gab.
Keine Kommentare:
Kommentar veröffentlichen