3

in einer nicht Kern asp MVC-Anwendung hatte ich einen Regler für signout Benutzer globalyAspCore Kunde Globale SignOut mit IdentityServer

es so ausgesehen

public ActionResult Logout() 
    { 
     Request.GetOwinContext().Authentication.SignOut(); 
     return Redirect("/"); 
    } 

jetzt habe ich ein asp Kern-Client und will ich ein Abmelde versucht

public async Task<ActionResult> LogOut() 
     { 
      if (User.Identity.IsAuthenticated) 
      { 
       await HttpContext.Authentication.SignOutAsync("Cookies"); 
      } 
      return Redirect("/"); 
     } 

aktualisieren

Jetzt scheint es, als würde ich mich abmelden, aber ich werde auf eine Seite umgeleitet, die Auth benötigt. Ich sehe, dass ich kurz auf Identitätsserver wieder zurück umgeleitet werde, die singt mich automatisch wieder in

Zusammengefasst:. ich in meiner ASP-Anwendung erhalten abgemeldet aber nicht auf Identitätsserver.

Wie kann ich mich global abmelden? Also muss ich am Identity Server aufgeben? Hier

Antwort

0

ist die offizielle Dokumentation für ASP.NET Identity Server Single Sign-Out:

single sign out documentation

Dies ist eine Probe von ihrer Demo-Implementierung tooked ist:

public ActionResult Signout() 
{ 
    Request.GetOwinContext().Authentication.SignOut(); 
    return Redirect("/"); 
} 

public void SignoutCleanup(string sid) 
{ 
    var cp = (ClaimsPrincipal)User; 
    var sidClaim = cp.FindFirst("sid"); 
    if (sidClaim != null && sidClaim.Value == sid) 
    { 
     Request.GetOwinContext().Authentication.SignOut("Cookies"); 
    } 
} 
+0

Ich würde sagen, dass es in diesem Zusammenhang nicht sinnvoll ist, da wir über AspNetCore App reden und wir Verwendung von OWIN Bibliotheken in dem verwalteten Code zu machen. Es funktioniert jedoch gut in einer nicht asp.net Core App, die OWIN verwendet. –

1

Wenn Sie OpenIdConnect Authentifizierung, müssen Sie auch Remote-Abmeldung. Versuchen Sie, Ihren Code so etwas wie folgt zu ändern:

public async Task<ActionResult> LogOut() 
    { 
     if (User.Identity.IsAuthenticated) 
     { 
      await HttpContext.Authentication.SignOutAsync("Cookies"); 
      await context.Authentication.SignOutAsync(OpenIdConnectDefaults.AuthenticationScheme, new AuthenticationProperties() 
      { 
       RedirectUri = "<signed out url>" 
      }); 

      // if you use different scheme name for openid authentication, use below code 
      //await context.Authentication.SignOutAsync(<your openid scheme>, new AuthenticationProperties() 
      //{ 
      // RedirectUri = "/signedout" 
      //}); 
     } 
     return Redirect("/"); 
    } 

Siehe Original-Probe https://github.com/aspnet/Security/blob/dev/samples/OpenIdConnectSample/Startup.cs

1

Ich habe über das gleiche Problem kam und es zu lösen hatte ich die Antwort Cookies mich in meiner IdentityServer Anwendung zu löschen.

var cookies = HttpContext.Request.Cookies.Keys; 
foreach (var cookie in cookies) 
{ 
    HttpContext.Response.Cookies.Delete(cookie, new CookieOptions 
    { 
     Domain = "localhost" // Your host name here 
    }); 
} 

// SignOutAsync depends on IdentityServer4 > Microsoft.AspNetCore.Http.Authentication 
await HttpContext.Authentication.SignOutAsync(); 

Was ich tat, war, wenn ich Kunde will-out unterschreiben, ich es meinem IdentityServer App umleiten, die wie oben die Antwort von Cookies löschen.

In diesem Code lösche ich alle Cookies für localhost, jedoch können Sie dort einen Filter hinzufügen und nur Cookies löschen, die IdentityServer verwendet, um die Benutzerauthentifizierung beizubehalten.

Im Folgenden finden Sie weitere Details zu dieser Implementierung.

http://benjii.me/2016/04/single-sign-out-logout-identity-server-4/