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?
Dank Ja, das funktioniert. –