Ho uno scenario univoco che sto tentando di risolvere in base ai limiti del plug-in Spring Security (versione 1.2.7.3 se curata). Ho creato un plugin SSO personalizzato che consente l'accesso con un URL firmato. Il plugin personalizzato funziona alla grande, e ho aggiunto secondo la documentazione creando i bean in resources.groovy e aggiungendolo alla catena di filtri all'interno di BootStrap.groovy.Come saltare saltuariamente il filtro SecurityContextPersistenceFilter nella catena del filtro del plug-in Grails Spring Security
SpringSecurityUtils.clientRegisterFilter('ssoFilter', SecurityFilterPosition.SECURITY_CONTEXT_FILTER.order + 10)
Una volta che un utente è firmato in ogni cosa funziona alla grande e la sessione attiva esistente che è stato aggiunto al contesto di protezione autentica l'utente.
Ho un caso d'uso in cui è possibile che un utente che è già autenticato possa tornare sullo stesso browser (cioè lo stesso cookie di sessione) con un utente diverso su una richiesta SSO. Mi piacerebbe che la catena di filtri noti 'sso = true' nella stringa di query dell'URL.
Il comportamento che sto vedendo ora è che l'SSO non viene mai raggiunto perché l'utente originale è già autenticato dal contesto di sicurezza. Non riesco ad aggiungere il filtro SSO prima dello SecurityContextPersistenceFilter in quanto ciò causa problemi in cui il filtro SSO viene costantemente colpito e nulla viene effettivamente visualizzato. Ciò segue i documenti in cui l'ho visto dicendo che non dovresti mettere nessun filtro davanti al filtro del contesto di sicurezza.
avevo guardato nella creazione di una catena di filtri speciale specificamente per gli URL con 'sso = true' (cosa che sto facendo durante il flusso non autenticato con l'aggiunta di un costume RequestMatcher e AuthenticationEntryPoint implementazione al DelegatingAuthenticationEntryPoint) utilizzando lo springsecurity.filterChain. chainMap config dicendo. Tuttavia, dai documenti e dagli esperimenti risulta che solo il percorso è filtrato.
C'è un modo per garantire che ogni volta che 'sso = true' viene visualizzato nell'URL, che il filtro SSO venga colpito mentre è ancora disponibile la disponibilità al contesto di sicurezza o che SecurityContextPersistenceFilter possa passare attraverso la richiesta al filtro SSO ?