Ich versuche, meine Grals-Anwendung mit Federsicherheit basierend auf PreAuth von Siteminder zu sichern. Das ist alles, was ich brauche. Die Anwendung wird nur zum Überprüfen einiger Dinge verwendet, so dass keine Datenbank benötigt wird.Grails, Spring Security & Siteminder - Probleme mit Ressourcen oder userDetails
Ich stecke auf einigen Filterproblemen, die ich irgendwie nicht umfassen kann.
Zuerst verwendete ich nur RequestHeaderAuthenticationFilter und benutzerdefinierte UserDetails und UserDetailsService.
Meine Feder Bohnen:
beans = {
userDetailsService(MyUserDetailsService)
userDetailsServiceWrapper(UserDetailsByNameServiceWrapper) {
userDetailsService = ref('userDetailsService')
}
preauthAuthProvider(PreAuthenticatedAuthenticationProvider) {
preAuthenticatedUserDetailsService = ref('userDetailsServiceWrapper')
}
requestHeaderAuthenticationFilter(RequestHeaderAuthenticationFilter){
principalRequestHeader='SM_USER'
authenticationManager = ref('authenticationManager')
}
}
Ich habe meine MyUserDetailsProvider:
class MyUserDetailsService implements GrailsUserDetailsService {
MyUserDetails loadUserByUsername(String username) throws UsernameNotFoundException{
//some super secret code here ;)
return new MyUserDetails(some needed params)
}
}
ich auch gesichert URLs konfiguriert wie in jeder weise Tutorial:
grails.plugins.springsecurity.interceptUrlMap = [
'/user/**':['ROLE_MINE'],
'/activation/**':['ROLE_SOMEOTHER, ROLE_MINE'],
'/js/**': ['IS_AUTHENTICATED_ANONYMOUSLY'],
'/css/**': ['IS_AUTHENTICATED_ANONYMOUSLY'],
'/images/**': ['IS_AUTHENTICATED_ANONYMOUSLY'],
'/*': ['IS_AUTHENTICATED_ANONYMOUSLY']
]
und einigen Anbietern (links anonym wie in einigen Tutorials empfohlen):
Es funktionierte gut für den Datenzugriff, aber es wurde nicht erlaubt, Ressourcen, insbesondere Bilder zu laden. Der Fehler besagt, dass der SM_USER-Header in der Anfrage nicht gefunden wurde.
Also dachte ich, dass ich eine Lösung wie 'filters: none' oder 'security: none' verwenden könnte, so dass Spring weiß, welche URL-Anfrage ohne Überprüfung von SM_USER ablaufen lässt.
ich versuchte, indem Material zu filtern und zu filter:
grails.plugins.springsecurity.filterNames = ['requestHeaderAuthenticationFilter']
grails.plugins.springsecurity.filterChain.chainMap = [
'/user/**': 'requestHeaderAuthenticationFilter',
'/activation/**': 'requestHeaderAuthenticationFilter',
'/*': 'requestHeaderAuthenticationFilter'
]
aber es half nicht.
Dann habe ich versucht, einen anderen Filter für die Ressourcen ohne SM_USER-Header verwendet werden. Aus Referenz habe ich verstanden, dass anonymer Filter ausreichen könnte.
So habe ich einige Änderungen:
grails.plugins.springsecurity.providerNames = ['preauthAuthProvider','anonymousAuthenticationProvider']
grails.plugins.springsecurity.filterNames = ['anonymousAuthenticationFilter','requestHeaderAuthenticationFilter']
grails.plugins.springsecurity.filterChain.filterNames = ['anonymousAuthenticationFilter','requestHeaderAuthenticationFilter'
]
grails.plugins.springsecurity.filterChain.chainMap = [
'/user/**': 'requestHeaderAuthenticationFilter',
'/versionone/**': 'requestHeaderAuthenticationFilter',
'/activation/**': 'requestHeaderAuthenticationFilter',
'/js/**': 'anonymousAuthenticationFilter',
'/css/**': 'anonymousAuthenticationFilter',
'/images/**': 'anonymousAuthenticationFilter',
'/*': 'requestHeaderAuthenticationFilter'
]
YAY, die für Bilder geholfen. Aber ein anderes Problem trat auf.
Anstelle des myUserDetails-Objekts, das zurückgegeben werden soll, wenn die Authentifizierung korrekt ist, erhalte ich ziemlich häufig ein String-Objekt. Und meine App ist nicht in der Lage, eine Eigenschaft in diesem String-Objekt zu finden (was ziemlich offensichtlich ist, da es nicht da ist;))
Kann jemand mit diesem Problem umgehen? Das Ausstellen von Bildern ist keine Option;)
Gibt es eine Möglichkeit, Bilder/andere Ressourcen von Filterchain im Frühjahr Sicherheit Grails Konfiguration auszuschließen ...? Genau wie es in normalen Java .xml Weg gemacht wurde ...?
Ich werde alle Hilfe und Vorschläge zu schätzen, wie Sie das lösen können.
Danke !!!
// EDIT: wenn vielleicht jemand hat dies als Referenz Sicherheit einzurichten für Siteminder sso Bitte beachten Sie, hinzuzufügen:
checkForPrincipalChanges = 'true'
invalidateSessionOnPrincipalChange = 'true'
Objekte zu Ihrem requestHeaderAuthenticationFilter. Andernfalls werden Sie beim Aufrufen von springSecurityService.getPrincipal() nicht mit der aktualisierten Authority in der http-Sitzung konfrontiert. Daher sind Benutzer möglicherweise "als jemand anderes angemeldet". :) Überlegen Sie auch, den Umfang Ihrer Bohnen auf "Prototyp" zu ändern.