/ / CAS e Spring Security: controlla regolarmente se un biglietto è scaduto - sicurezza di primavera, single-sign-on, cas

CAS e Spring Security: controlla regolarmente se un biglietto è scaduto - sicurezza di primavera, single-sign-on, cas

Ho un server CAS e un client configurato tramite Spring-Security. Single Sign On e Single Logout funzionano bene finora.

Sto ancora affrontando un problema con il timeout della sessione. Come ho capito, la politica di scadenza del ticket non è influenzata dall'ozio della sessione laterale del client CAS protetto. Pertanto, un client deve attivamente riconvalidare un ticket per vedere se è scaduto e non viene registrato l'evento di scadenza dal server CAS, come nel caso in cui viene eseguito un singolo logout.

Per costringere il mio cliente fissato a primavera regolarmentecontrolla la scadenza del ticket Potrei impostare il timeout della sessione su un valore basso come un minuto o giù di lì. Ma questo ha l'inconveniente di rimuovere tutti i miei dati di sessione. Non molto facile da usare.

C'è un modo per dire a primavera sicurezza di controllare regolarmente se un biglietto è ancora valido senza prima distruggere la sessione utente?

risposte:

2 per risposta № 1

Sarei abbastanza fiducioso sulla soluzione Javascript in quanto è solo un semplice controllo per forzare il logout locale, anche se è necessario personalizzare il server CAS, che non è possibile fare.

Hai la soluzione di avere una sessione più breve sul lato delle applicazioni per forzare la riautenticazione regolare, ma questo significa che annullerai spesso la sessione dell'applicazione e la ricreerai.

Una soluzione migliore può essere basata su gateway parametro del protocollo CAS: l'utilizzo di questo parametro non produrrà un ticket di servizio se non si è autenticato SSO. Quindi potresti avere:

  1. un filtro applicazione che, ogni 5 minuti, salva l'url corrente, attiva un round trip CAS con gateway = true e un servizio specifico: http://myserver/myapp/checkCasSession
  2. un URL specifico: / checkCasSession: se riceve un ticket di servizio, tutto è ok, la sessione CAS è ancora valida, ripristina solo l'url originale. Se non è presente alcun ticket di servizio, la sessione locale deve terminare e viene attivato un logout locale.

2 per risposta № 2

Penso che non ci sia un modo simile. Spring Security e Spring Security Cas sono implementati come set di filtri / ascoltatori API Servlet. Quindi Spring Security Cas funziona solo durante l'elaborazione di richieste Http / Session. Non vedo alcuna dipendenza su alcune librerie di programmazione per spring-security-cas.jar.


1 per risposta № 3

Non è un problema facile da risolvere subito con Spring Security: è necessario lavorare su entrambi i lati: client e server.

  1. crea un controller sul lato server CAS che restituisce un JSON che indica se il CASTGC è scaduto o meno
  2. ogni 5 minuti (ad esempio) e ogni volta aviene visualizzata la pagina dell'applicazione, aggiungere qualche javascript per chiamare questo controller CAS specifico e, se la sessione CAS è terminata, termina anche la sessione dell'applicazione.

È necessario chiamare il server CAS dal canale anteriore poiché la sessione CAS è trattenuta dal cookie CASTGC.


0 per risposta № 4

Hai due sessioni: l'applicazione con il suo timeout di inattività e il CAS con timeout inattivi / duri. Dopo aver effettuato l'accesso all'applicazione tramite il login CAS, la sessione dell'applicazione vive autonomamente e può durare più della sessione CAS. Generalmente non è un problema: quale caso d'uso vuoi gestire?