Zeitweise auftretender OpenID Connect-Anmeldefehler in ADFS 4.0

Zeitweise auftretender OpenID Connect-Anmeldefehler in ADFS 4.0

Wir haben eine Windows 2016 ADFS 4.0-Farm (WID-Datenbank, nicht SQL Server), die in Azure gehostet wird.

Wir arbeiten mit einer neuen OpenID Connect-Anwendung und möchten ADFS verwenden, um Benutzerprofile aus AD zu authentifizieren und zu füllen. Die Anwendung verwendet ein gemeinsames Geheimnis für die JWT-Konfiguration.

Dies war in unserer Testumgebung (Einzelknotenfarm) sehr einfach zu konfigurieren.

Als wir denselben Anwendungsserver auf unserem Produktions-ADFS-Server konfigurierten, war dies zunächst erfolgreich, doch nach der Anmeldung traten zeitweise Anmeldefehler auf. Nachdem Sie sich bei ADFS angemeldet haben, werden Sie an die Rückruf-URL weitergeleitet. Diese leitet Sie auf eine Anmeldeseite um, und auf dieser Seite befindet sich ein modales Dialogfeld mit dieser Fehlermeldung: Call to IdP failed to get identity

Wenn wir ein paar Mal auf „Aktualisieren“ klicken, lässt uns die Anwendung schließlich in die Anwendung einsteigen. Als wir eine Fiddler-Ablaufverfolgung für die fehlerhafte Verbindung ausführten, fanden wir diesen Fehler:

{"errorCodeString":"camAuthUnrecoverable",
"messages":[{"messageString":"Call to IdP failed to get identity. Status 400\nError: invalid_grant\nError description: MSIS9612: The authorization code received in 'code' parameter is invalid. "}],
"promptInfo":{"captions":["Call to IdP failed to get identity"]}}

Ich habe Fehler in der ADFS-Ereignisanzeige mit dieser Art von Meldung gefunden:

Encountered error during OAuth token request. 

Additional Data 

Exception details: 
    Microsoft.IdentityServer.Web.Protocols.OAuth.Exceptions.OAuthAccessTokenInvalidAuthorizationCodeException: 
MSIS9252: The authorization code received is invalid. 
No artifact found for the specified authorization code: '//redacted//'. 
The cause may be that artifact has timed out, or the authorization code was replayed, or the authorization code is invalid. 
   at Microsoft.IdentityServer.Web.Protocols.OAuth.OAuthToken.OAuthTokenProtocolHandler.RedeemAccessToken(OAuthAccessTokenRequestContext tokenContext)

In jedem Fall konnten wir uns anmelden, nachdem wir mehrmals auf „Neu laden“ geklickt hatten.

Als wir die Anzahl der Knoten in der Farm auf 1 reduzierten, schien das Problem zu verschwinden. Als wir die Knoten jedoch erneut hinzufügten, trat es erneut auf.

Sind andere beim Einrichten von OpenID Connect/OAuth2-Apps auf dieses Problem gestoßen? Wie haben Sie das Problem gelöst?

Während die SAML2-Artefaktauflösung in ADFS 4.0 mit WID nicht unterstützt wird, gibt es keinen Hinweis darauf, dass dasselbe Problem auch für OpenID Connect gilt, obwohl das nur meine Vermutung ist. Lohnt sich der Aufwand, ADFS für die Verwendung eines SQL Server-Clusters zu konvertieren?

Antwort1

Dies ist ein Problem, wenn Sie:

  1. haben eine ADFS-Farm mit mehreren Knoten.
  2. ADFS-Knoten verwenden WID (SQLExpress/LocalDB)
  3. Verwenden einer „Anwendungsgruppe“ (OIDC-Anwendung) mit einer Web-API, die zum Ausgeben von Ansprüchen konfiguriert ist.

Im Gegensatz zu (den meisten) SAML-Verbindungen ruft OIDC Daten direkt vom IDP ab.

ADFS+SQLexpress gibt die Konfiguration nur zwischen Knoten frei. Wenn Ihre Anwendung also versucht, Token von einem anderen Farmknoten abzurufen als dem, bei dem Sie sich authentifiziert haben, schlägt dies fehl.

Die schnelle Antwort besteht darin, ADFS von einer SQLExpress-Konfiguration auf eine SQL Server-Implementierung umzustellen. Als ich das tat, funktionierte OIDC zuverlässig.

Dokumentation hierzu ist schwer zu bekommen. Meine Quellen sind verschwunden, ich werde meine Notizen online stellen und einen Link dazu bereitstellen, sobald ich dazu Gelegenheit habe.

Alte Links, die nicht mehr funktionieren:

verwandte Informationen