Laden...

OIDC-Logout nicht möglich (Fehlender Parameter: id_token_hint)

Letzter Beitrag vor 2 Jahren 5 Posts 1.345 Views
OIDC-Logout nicht möglich (Fehlender Parameter: id_token_hint)

Huhu,

ich hab da ein kleines Problem. Und zwar bin ich gerade dabei von einer unserer Seiten den Login auf OIDC umzustellen. Dafür habe ich mich an folgendes Tutorial gehalten:

Tutorial: Erstellen einer ASP.NET-Web-App, die Microsoft Identity Platform für die Authentifizierung verwendet - Microsoft Entra

Ich habe die Credentials an den Keycloakserver von unserem Anbieter angepasst und der Login funktioniert auch einwandfrei, jedoch der Logout funktioniert dann nicht mehr. Sobald ich den Logoutbefehl sende, bekomme ich folgende Fehlermeldung:

Fehlermeldung:
Es ist ein Fehler aufgetreten
Fehlender Parameter: id_token_hint

Diese Fehlermeldung steht dann direkt auf der Seite vom Anbieter wo der Logout stattfinden soll. Ich kann damit leider überhaupt nix anfangen was das überhaupt für ein Parameter ist den er da haben will, geschweige denn wie man ihn übergibt. Hier noch der Logoutcode den ich verwende:


HttpContext.Current.GetOwinContext().Authentication.SignOut(
    OpenIdConnectAuthenticationDefaults.AuthenticationType,
    CookieAuthenticationDefaults.AuthenticationType);

Und hier vorsichtshalber auch der Login-Code (der Problemlos funktioniert):


ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

HttpContext.Current.GetOwinContext().Authentication.Challenge(
    new AuthenticationProperties { RedirectUri = "http://localhost:44361/Pages/SSOLogin.aspx" },
        OpenIdConnectAuthenticationDefaults.AuthenticationType);

Könnt ihr mir da vielleicht weiterhelfen? Oder liegt der Fehler vielleicht gar nicht an meinem Code sondern auf der Seite des Anbieters?

Vielen Dank schon einmal im Voraus.

Viele Grüße
Maliko

PS: Unsere Seite basiert auf WebForms nicht auf ASPC.Net Core MVC.

Unsere Seite basiert auf WebForms nicht auf ASPC.Net Core MVC.

Ja, das sieht man sofort anhand von HttpContext.Current.GetOwinContext() - verursacht innerliche Schmerzen 😉

Gemäß der Fehlermeldung schickt ihr eben den vom Provider als Pflicht definierten Parameter id_token_hint nicht mit. Sieht man im Code auch nichts. Und wenn ihr eben nen Pflichtparameter vergesst....
Lösung: mitschicken.

In der ASP.NET Core Pipeline würde man das in den Notification Handlern beim RedirectProvider konfigurieren; wie das beim uralten Owin Zeug geht weiß ich nicht; aber hast wenigstens ne Idee nach was Du suchen musst.

PS: damit loggt sich der User jedoch nur beim Anbieter aus, nicht bei euch in der App (by design, weil Token nur zeitlich ablaufen und nie "abgemeldet" werden können).

Ja, das sieht man sofort anhand von HttpContext.Current.GetOwinContext() - verursacht innerliche Schmerzen 😉

Ich würde wirklich gerne das Ding neu machen. Doch jedes mal wenn ich versuche das meinem Vorgesetzen zu erklären, heißt es immer, da haben wir keine Zeit für, machen wir nicht.

In der ASP.NET Core Pipeline würde man das in den Notification Handlern beim RedirectProvider konfigurieren; wie das beim uralten Owin Zeug geht weiß ich nicht; aber hast wenigstens ne Idee nach was Du suchen musst.

Uff. Ich schau mal ob ich da was entsprechendes Finde. Habs mit dem Login ja auch hinbekommen.

PS: damit loggt sich der User jedoch nur beim Anbieter aus, nicht bei euch in der App (by design, weil Token nur zeitlich ablaufen und nie "abgemeldet" werden können).

Das ist mir bewusst. Der Login von unserer Seite aus (sprich killen der Session und ähnliches) ist bereits fertig und funktioniert auch. Ich kann nur momentan den Login nicht an den Anbieter weiterleiten, der ja denke ich auch gerne wissen möchte, dass der User sich ausgeloggt hat.

Ausloggen ist in dem Szenario aber nicht gleich ausloggen

  • Man kann sich bei einem Token Provider ausloggen, dann killt das dort auch alle Cookies für die gesamte Single Sign-On Landschaft.
  • Man kann sich an einer App ausloggen, die im Hintergrund einen Token verwendet -> man löscht also nur den aktuellen Token aus dem Client. Der Provider erfährt davon nichts, Single Sign On bleibt unberührt.

Ich würde es als störend empfinden, wenn ich bei mycsharp.de mit meinem GitHub Konto SSO angemeldet wäre und ein Logout mich hier auch bei GitHub ausloggen würde.

Jup. Das ist uns hier im Büro auch gerade aufgefallen. Wir lassens also einfach sein und melden den Benutzer einfach nur bei uns ab.