0

Ich habe eine AngularJS-Einzelseiten-App, die mit einem IdentityServer3 SSO-Dienst für Autorisierung/Authentifizierung und einer .NET Core WebApi-Dienstschicht arbeitet, die Zugriff auf Daten und Geschäftslogik bietet.Sitzungsstatus über Weiterleitungen verwalten

Normalerweise leitet die Anwendung nach der Anmeldung des Benutzers zur Homepage des Internets um. Unter bestimmten Umständen muss die Anwendung jedoch zu einer anderen URL zurückkehren. Laut den Entwicklern, IdentityServer3 cannot do this, muss daher die Anforderung von der Anwendung behandelt werden. Sie schlagen vor, Sitzungsspeicher zu verwenden, um eine Weiterleitungs-URL beizubehalten, bevor die App den Benutzer zur Authentifizierung zur SSO-Site führt, bis sie zurückgegeben wird, wenn sie die gespeicherte URL abrufen und den Benutzer dorthin umleiten sollte.

In diesem Sinne schrieb ich einen WebAPI Controller die URL zu beharren:

[Route("api/[controller]")] 
public class RedirectController : Controller 
{ 
    private const string _redirectKey = "RedirectUrl"; 

    // GET: api/redirect 
    [HttpGet] 
    public string Get() 
    { 
     return HttpContext.Session.GetString(_redirectKey); 
    } 

    // POST api/redirect 
    [HttpPost()] 
    public void Post([FromBody]string url) 
    { 
     HttpContext.Session.SetString(_redirectKey, url); 
    } 

    // DELETE api/redirect/ 
    [HttpDelete()] 
    public void Delete() 
    { 
     HttpContext.Session.Remove(_redirectKey); 
    } 
} 

und Methoden im SPA zu setzen und rufen Sie die URL:

//to initiate authorisation 
$scope.logIn = function() { 
    var url = $config.webRoot + "/#/myurl"; 
    redirectService.setRedirectUrl(url).then(function (success) { 
     if (success) { 
      authorisationService.authorise(); 
     } 
    }); 
}; 

//after authorisation 
authorisationService.processTokenCallbackAsync(hash).then(function() { 
    //$log.info(authorisationService.accessToken()); 
    //check if the app has set a redirect url for this session 
    redirectService.getRedirectUrl().then(function (url) { 
     $window.location.href = url || $config.webRoot + "/#/"; 
    }); 
}, function (error) { 
    $log.error(error && error.message || error); 
}); 

jedoch die Sitzung beendet, wenn die App zur SSO-Site navigiert. Wenn es zurückkommt, ist die SessionID anders. Ist es möglich, den Sitzungsstatus über die SSO-Umleitung hinweg aufrechtzuerhalten, und wenn ja, wie mache ich das?

Antwort

1

Ich glaube, Sie haben falsch interpretiert, was Brock Allen in der Antwort auf die von Ihnen zur Verfügung gestellte GitHub-Ausgabe meinte.

Was ich glaube ist, dass er sich auf die browser session storage und nicht auf irgendeine Art von Server Seite Sitzung bezieht.

Serverseitige Sitzungen brechen den Zweck einer RESTful API, und ich sehe keine Vorteile bei der Verwendung von ihnen.

Session Speicher ist völlig Client-Seite und können Sie Informationen speichern, bis der Browser geschlossen wird (oder die Sitzung endet):

sessionStorage.setItem('key', 'value'); 

Und retrive es mit:

sessionStorage.getItem('key'); 
+0

Dank Ja, das funktioniert. –