Álvaro, checking your code I realized I could make my own RestAuthenticationFilter to work with my custom UserPassOrgAuthToken, so I defined a RestAuthFilter that extends yours
If I send this {"username":"admin","password":"admin", "organization":"1234"} to /rest/login, I get the JWT ok.
Now I tried to use the token in a REST call to /rest/ehrs using the Authorization header = Bearer JWT
Looking at the logs it seems RestTokenValidationFilter is validating the token but I got 403. Also it seems weird that after RestTokenValidationFilter the remaining filters are being executed. There is an exception at the end (not sure what that is)
2015-12-10 14:56:37,198 [http-bio-8090-exec-7] DEBUG access.ExceptionTranslationFilter - Calling Authentication entry point.
2015-12-10 14:56:37,198 [http-bio-8090-exec-7] DEBUG bearer.BearerTokenReader - Looking for bearer token in Authorization header, query string or Form-Encoded body parameter
2015-12-10 14:56:37,198 [http-bio-8090-exec-7] DEBUG bearer.BearerTokenReader - No token found
2015-12-10 14:57:47,568 [http-bio-8090-exec-9] DEBUG matcher.AntPathRequestMatcher - Checking match of request : '/rest/ehrs'; against '/rest/**'
2015-12-10 14:57:47,568 [http-bio-8090-exec-9] DEBUG web.FilterChainProxy - /rest/ehrs at position 1 of 9 in additional filter chain; firing Filter: 'AuthFilter'
2015-12-10 14:57:47,568 [http-bio-8090-exec-9] DEBUG web.FilterChainProxy - /rest/ehrs at position 2 of 9 in additional filter chain; firing Filter: 'RestAuthFilter'
2015-12-10 14:57:47,568 [http-bio-8090-exec-9] DEBUG web.FilterChainProxy - /rest/ehrs at position 3 of 9 in additional filter chain; firing Filter: 'MutableLogoutFilter'
2015-12-10 14:57:47,568 [http-bio-8090-exec-9] DEBUG web.FilterChainProxy - /rest/ehrs at position 4 of 9 in additional filter chain; firing Filter: 'RestAuthenticationFilter'
2015-12-10 14:57:47,568 [http-bio-8090-exec-9] DEBUG rest.RestAuthenticationFilter - Actual URI is /rest/ehrs; endpoint URL is /rest/login
2015-12-10 14:57:47,568 [http-bio-8090-exec-9] DEBUG web.FilterChainProxy - /rest/ehrs at position 5 of 9 in additional filter chain; firing Filter: 'SecurityContextHolderAwareRequestFilter'
2015-12-10 14:57:47,568 [http-bio-8090-exec-9] DEBUG web.FilterChainProxy - /rest/ehrs at position 6 of 9 in additional filter chain; firing Filter: 'GrailsAnonymousAuthenticationFilter'
2015-12-10 14:57:47,568 [http-bio-8090-exec-9] DEBUG filter.GrailsAnonymousAuthenticationFilter - Populated SecurityContextHolder with anonymous token: 'grails.plugin.springsecurity.authentication.GrailsAnonymousAuthenticationToken@dc4337e: Principal: org.springframework.security.core.userdetails.User@dc730200: Username: __grails.anonymous.user__; Password: [PROTECTED]; Enabled: false; AccountNonExpired: false; credentialsNonExpired: false; AccountNonLocked: false; Granted Authorities: ROLE_ANONYMOUS; Credentials: [PROTECTED]; Authenticated: true; Details: org.springframework.security.web.authentication.WebAuthenticationDetails@957e: RemoteIpAddress: 127.0.0.1; SessionId: null; Granted Authorities: ROLE_ANONYMOUS'
2015-12-10 14:57:47,568 [http-bio-8090-exec-9] DEBUG web.FilterChainProxy - /rest/ehrs at position 7 of 9 in additional filter chain; firing Filter: 'RestTokenValidationFilter'
2015-12-10 14:57:47,568 [http-bio-8090-exec-9] DEBUG bearer.BearerTokenReader - Looking for bearer token in Authorization header, query string or Form-Encoded body parameter
2015-12-10 14:57:47,568 [http-bio-8090-exec-9] DEBUG bearer.BearerTokenReader - Found bearer token in Authorization header
2015-12-10 14:57:47,568 [http-bio-8090-exec-9] DEBUG rest.RestTokenValidationFilter - Token found: eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE0NDk4NTY1NzMs
InN1YiI6ImFkbWluIiwicHJpbmNpcGFsIjoiSDRzSUFBQUFBQUFBQUpWU1AwXC9iUUJSXC9UaE5SRllrQ0VwVTZ3RkxZa0NPMVl4Yit0bXBsUWtXYUJTU3FpXC8xd0Q4NTM1dTRNeVZKbGFnY
0dFQzFTcFg0RnZna3NmSUFLQmxabVZ0NFpnbE1XeEUzMnU1OVwvXC81NlByNkJpTkx5TE5lUEMrS25JWWk1OWsyb3VZNE5ocHJudCtKbEJIYUhORVI5eVlKTW1jSHU4RW5nQmxIaGtZVFRZWk
R1c0twaU1xOHV0VFF4dHJhM2hyZEx4SGVPR1pnbnVLcjNsMzNPSFN1TlwvQWdXMU4xT0NnVlVZWVdHb01tbnJTaTYyVTY0eFdvWGhZaGFvY011TnhrSzZRV2s1RTZZZk9vQ1N0UVJHQVF5eXp
INVRwTXJSV0hoNWF6YXpYRlFiYUdzQlBFK1pNZVR1UVpLR2RkYmR2Yk1wS2NFMmZJZHlPXC9Yb1VIZFREdW83SG45ZUNVR3B1Wkptc2lrVEZmRU43c1NKdnp0K2VMYlwvdDlzc0FWQW4wNDlc
L1U4eGZ6MEgzWlAxNklpXC9hQ3kyODZyTmV3R3J0bE55TUZNeGZORHJsZjM4K1wvenE2K3JuMmpKUWQ0djNUOXpFNWU5ZGNaMTRsS2RQTXFyNGRFZTF1MlQwVCtkemo1TDB0ZFB3R1QxS0I5R
WRKaTlHOVJFRk1jY3RhaVY3ZkZsNnNMQWVMWDJjWGxqN1czV3VGUlFtWHBEcVVoM2JiOGdORnU5cTdQRGpkZjNOT0RKK2dzc05FaHRUNWNBR3FaMGtMOVlcL2pvXC9IQjN4ZDdlWUxlMzN3RE
FlVXg1eEVEQUFBPSIsInJvbGVzIjpbIlJPTEVfQURNSU4iXSwiaWF0IjoxNDQ5NzcwMTczfQ.bI3MNYv6ALdxOyNBbhiJ1cHu6ln90L4Hn5ZVfnbNcws
2015-12-10 14:57:47,578 [http-bio-8090-exec-9] DEBUG rest.RestTokenValidationFilter - Trying to authenticate the token
2015-12-10 14:57:47,578 [http-bio-8090-exec-9] DEBUG rest.RestAuthenticationProvider - Trying to validate token eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE
0NDk4NTY1NzMsInN1YiI6ImFkbWluIiwicHJpbmNpcGFsIjoiSDRzSUFBQUFBQUFBQUpWU1AwXC9iUUJSXC9UaE5SRllrQ0VwVTZ3RkxZa0NPMVl4Yit0bXBsUWtXYUJTU3FpXC8xd0Q4NTM1
dTRNeVZKbGFnY0dFQzFTcFg0RnZna3NmSUFLQmxabVZ0NFpnbE1XeEUzMnU1OVwvXC81NlByNkJpTkx5TE5lUEMrS25JWWk1OWsyb3VZNE5ocHJudCtKbEJIYUhORVI5eVlKTW1jSHU4RW5nQ
mxIaGtZVFRZWkR1c0twaU1xOHV0VFF4dHJhM2hyZEx4SGVPR1pnbnVLcjNsMzNPSFN1TlwvQWdXMU4xT0NnVlVZWVdHb01tbnJTaTYyVTY0eFdvWGhZaGFvY011TnhrSzZRV2s1RTZZZk9vQ1
N0UVJHQVF5eXpINVRwTXJSV0hoNWF6YXpYRlFiYUdzQlBFK1pNZVR1UVpLR2RkYmR2Yk1wS2NFMmZJZHlPXC9Yb1VIZFREdW83SG45ZUNVR3B1Wkptc2lrVEZmRU43c1NKdnp0K2VMYlwvdDl
zc0FWQW4wNDlcL1U4eGZ6MEgzWlAxNklpXC9hQ3kyODZyTmV3R3J0bE55TUZNeGZORHJsZjM4K1wvenE2K3JuMmpKUWQ0djNUOXpFNWU5ZGNaMTRsS2RQTXFyNGRFZTF1MlQwVCtkemo1TDB0
ZFB3R1QxS0I5RWRKaTlHOVJFRk1jY3RhaVY3ZkZsNnNMQWVMWDJjWGxqN1czV3VGUlFtWHBEcVVoM2JiOGdORnU5cTdQRGpkZjNOT0RKK2dzc05FaHRUNWNBR3FaMGtMOVlcL2pvXC9IQjN4Z
DdlWUxlMzN3REFlVXg1eEVEQUFBPSIsInJvbGVzIjpbIlJPTEVfQURNSU4iXSwiaWF0IjoxNDQ5NzcwMTczfQ.bI3MNYv6ALdxOyNBbhiJ1cHu6ln90L4Hn5ZVfnbNcws
2015-12-10 14:57:47,667 [http-bio-8090-exec-9] DEBUG rest.JwtService - Parsed an HMAC signed JWT
2015-12-10 14:57:47,707 [http-bio-8090-exec-9] DEBUG jwt.JwtTokenStorageService - Successfully verified JWT
2015-12-10 14:57:47,707 [http-bio-8090-exec-9] DEBUG jwt.JwtTokenStorageService - Trying to deserialize the principal object
2015-12-10 14:57:47,757 [http-bio-8090-exec-9] DEBUG jwt.JwtTokenStorageService - UserDetails deserialized: grails.plugin.springsecurity.userdetails.GrailsUser@586034f: Username: admin; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_ADMIN
2015-12-10 14:57:47,757 [http-bio-8090-exec-9] DEBUG rest.JwtService - Parsed an HMAC signed JWT
2015-12-10 14:57:47,766 [http-bio-8090-exec-9] DEBUG rest.RestAuthenticationProvider - Now is Thu Dec 10 14:57:47 GFT 2015 and token expires at Fri Dec 11 14:56:13 GFT 2015
2015-12-10 14:57:47,796 [http-bio-8090-exec-9] DEBUG rest.RestAuthenticationProvider - Expiration: 86305
2015-12-10 14:57:47,796 [http-bio-8090-exec-9] DEBUG rest.RestAuthenticationProvider - Authentication result: grails.plugin.springsecurity.rest.
token.AccessToken(accessToken:eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE0NDk4NTY1NzMsInN1YiI6ImFkbWluIiwicHJpbmNpcGFsIjoiSDRzSUFBQUFBQUFBQUpWU1AwXC9iUUJSXC
9UaE5SRllrQ0VwVTZ3RkxZa0NPMVl4Yit0bXBsUWtXYUJTU3FpXC8xd0Q4NTM1dTRNeVZKbGFnY0dFQzFTcFg0RnZna3NmSUFLQmxabVZ0NFpnbE1XeEUzMnU1OVwvXC81NlByNkJpTkx5TE5
lUEMrS25JWWk1OWsyb3VZNE5ocHJudCtKbEJIYUhORVI5eVlKTW1jSHU4RW5nQmxIaGtZVFRZWkR1c0twaU1xOHV0VFF4dHJhM2hyZEx4SGVPR1pnbnVLcjNsMzNPSFN1TlwvQWdXMU4xT0Nn
VlVZWVdHb01tbnJTaTYyVTY0eFdvWGhZaGFvY011TnhrSzZRV2s1RTZZZk9vQ1N0UVJHQVF5eXpINVRwTXJSV0hoNWF6YXpYRlFiYUdzQlBFK1pNZVR1UVpLR2RkYmR2Yk1wS2NFMmZJZHlPX
C9Yb1VIZFREdW83SG45ZUNVR3B1Wkptc2lrVEZmRU43c1NKdnp0K2VMYlwvdDlzc0FWQW4wNDlcL1U4eGZ6MEgzWlAxNklpXC9hQ3kyODZyTmV3R3J0bE55TUZNeGZORHJsZjM4K1wvenE2K3
JuMmpKUWQ0djNUOXpFNWU5ZGNaMTRsS2RQTXFyNGRFZTF1MlQwVCtkemo1TDB0ZFB3R1QxS0I5RWRKaTlHOVJFRk1jY3RhaVY3ZkZsNnNMQWVMWDJjWGxqN1czV3VGUlFtWHBEcVVoM2JiOGd
ORnU5cTdQRGpkZjNOT0RKK2dzc05FaHRUNWNBR3FaMGtMOVlcL2pvXC9IQjN4ZDdlWUxlMzN3REFlVXg1eEVEQUFBPSIsInJvbGVzIjpbIlJPTEVfQURNSU4iXSwiaWF0IjoxNDQ5NzcwMTcz
fQ.bI3MNYv6ALdxOyNBbhiJ1cHu6ln90L4Hn5ZVfnbNcws, expiration:86305, refreshToken:null, principal:grails.plugin.springsecurity.userdetails.GrailsUser@586034f: Username: admin; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_ADMIN, super:grails.plugin.springsecurity.rest.token.AccessToken@4525caad: Principal: grails.plugin.springsecurity.userdetails.GrailsUser@586034f: Username: admin; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_ADMIN; Credentials: [PROTECTED]; Authenticated: true; Details: null; Granted Authorities: ROLE_ADMIN)
2015-12-10 14:57:47,796 [http-bio-8090-exec-9] DEBUG rest.RestTokenValidationFilter - Token authenticated. Storing the authentication result in the security context
2015-12-10 14:57:47,796 [http-bio-8090-exec-9] DEBUG rest.RestTokenValidationFilter - Authentication result: grails.plugin.springsecurity.rest.t
oken.AccessToken(accessToken:eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE0NDk4NTY1NzMsInN1YiI6ImFkbWluIiwicHJpbmNpcGFsIjoiSDRzSUFBQUFBQUFBQUpWU1AwXC9iUUJSXC9
UaE5SRllrQ0VwVTZ3RkxZa0NPMVl4Yit0bXBsUWtXYUJTU3FpXC8xd0Q4NTM1dTRNeVZKbGFnY0dFQzFTcFg0RnZna3NmSUFLQmxabVZ0NFpnbE1XeEUzMnU1OVwvXC81NlByNkJpTkx5TE5l
UEMrS25JWWk1OWsyb3VZNE5ocHJudCtKbEJIYUhORVI5eVlKTW1jSHU4RW5nQmxIaGtZVFRZWkR1c0twaU1xOHV0VFF4dHJhM2hyZEx4SGVPR1pnbnVLcjNsMzNPSFN1TlwvQWdXMU4xT0NnV
lVZWVdHb01tbnJTaTYyVTY0eFdvWGhZaGFvY011TnhrSzZRV2s1RTZZZk9vQ1N0UVJHQVF5eXpINVRwTXJSV0hoNWF6YXpYRlFiYUdzQlBFK1pNZVR1UVpLR2RkYmR2Yk1wS2NFMmZJZHlPXC
9Yb1VIZFREdW83SG45ZUNVR3B1Wkptc2lrVEZmRU43c1NKdnp0K2VMYlwvdDlzc0FWQW4wNDlcL1U4eGZ6MEgzWlAxNklpXC9hQ3kyODZyTmV3R3J0bE55TUZNeGZORHJsZjM4K1wvenE2K3J
uMmpKUWQ0djNUOXpFNWU5ZGNaMTRsS2RQTXFyNGRFZTF1MlQwVCtkemo1TDB0ZFB3R1QxS0I5RWRKaTlHOVJFRk1jY3RhaVY3ZkZsNnNMQWVMWDJjWGxqN1czV3VGUlFtWHBEcVVoM2JiOGdO
RnU5cTdQRGpkZjNOT0RKK2dzc05FaHRUNWNBR3FaMGtMOVlcL2pvXC9IQjN4ZDdlWUxlMzN3REFlVXg1eEVEQUFBPSIsInJvbGVzIjpbIlJPTEVfQURNSU4iXSwiaWF0IjoxNDQ5NzcwMTczf
Q.bI3MNYv6ALdxOyNBbhiJ1cHu6ln90L4Hn5ZVfnbNcws, expiration:86305, refreshToken:null, principal:grails.plugin.springsecurity.userdetails.GrailsUser
@586034f: Username: admin; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_ADMIN, super:grails.plugin.springsecurity.rest.token.AccessToken@4525caad: Principal: grails.plugin.springsecurity.userdetails.GrailsUser@586034f: Username: admin; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_ADMIN; Credentials: [PROTECTED]; Authenticated: true; Details: null; Granted Authorities: ROLE_ADMIN)
2015-12-10 14:57:47,806 [http-bio-8090-exec-9] DEBUG rest.RestTokenValidationFilter - Continuing the filter chain
2015-12-10 14:57:47,806 [http-bio-8090-exec-9] DEBUG web.FilterChainProxy - /rest/ehrs at position 8 of 9 in additional filter chain; firing Filter: 'ExceptionTranslationFilter'
2015-12-10 14:57:47,806 [http-bio-8090-exec-9] DEBUG web.FilterChainProxy - /rest/ehrs at position 9 of 9 in additional filter chain; firing Filter: 'FilterSecurityInterceptor'
2015-12-10 14:57:47,806 [http-bio-8090-exec-9] DEBUG intercept.FilterSecurityInterceptor - Secure object: FilterInvocation: URL: /rest/ehrs; Attributes: [_DENY_]
2015-12-10 14:57:47,806 [http-bio-8090-exec-9] DEBUG intercept.FilterSecurityInterceptor - Previously Authenticated: grails.plugin.springsecurit
y.rest.token.AccessToken(accessToken:eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE0NDk4NTY1NzMsInN1YiI6ImFkbWluIiwicHJpbmNpcGFsIjoiSDRzSUFBQUFBQUFBQUpWU1AwXC9
iUUJSXC9UaE5SRllrQ0VwVTZ3RkxZa0NPMVl4Yit0bXBsUWtXYUJTU3FpXC8xd0Q4NTM1dTRNeVZKbGFnY0dFQzFTcFg0RnZna3NmSUFLQmxabVZ0NFpnbE1XeEUzMnU1OVwvXC81NlByNkJp
Tkx5TE5lUEMrS25JWWk1OWsyb3VZNE5ocHJudCtKbEJIYUhORVI5eVlKTW1jSHU4RW5nQmxIaGtZVFRZWkR1c0twaU1xOHV0VFF4dHJhM2hyZEx4SGVPR1pnbnVLcjNsMzNPSFN1TlwvQWdXM
U4xT0NnVlVZWVdHb01tbnJTaTYyVTY0eFdvWGhZaGFvY011TnhrSzZRV2s1RTZZZk9vQ1N0UVJHQVF5eXpINVRwTXJSV0hoNWF6YXpYRlFiYUdzQlBFK1pNZVR1UVpLR2RkYmR2Yk1wS2NFMm
ZJZHlPXC9Yb1VIZFREdW83SG45ZUNVR3B1Wkptc2lrVEZmRU43c1NKdnp0K2VMYlwvdDlzc0FWQW4wNDlcL1U4eGZ6MEgzWlAxNklpXC9hQ3kyODZyTmV3R3J0bE55TUZNeGZORHJsZjM4K1w
venE2K3JuMmpKUWQ0djNUOXpFNWU5ZGNaMTRsS2RQTXFyNGRFZTF1MlQwVCtkemo1TDB0ZFB3R1QxS0I5RWRKaTlHOVJFRk1jY3RhaVY3ZkZsNnNMQWVMWDJjWGxqN1czV3VGUlFtWHBEcVVo
M2JiOGdORnU5cTdQRGpkZjNOT0RKK2dzc05FaHRUNWNBR3FaMGtMOVlcL2pvXC9IQjN4ZDdlWUxlMzN3REFlVXg1eEVEQUFBPSIsInJvbGVzIjpbIlJPTEVfQURNSU4iXSwiaWF0IjoxNDQ5N
ailsUser@586034f: Username: admin; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked:
true; Granted Authorities: ROLE_ADMIN, super:grails.plugin.springsecurity.rest.token.AccessToken@4525caad: Principal: grails.plugin.springsecurity.userdetails.GrailsUser@586034f: Username: admin; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_ADMIN; Credentials: [PROTECTED]; Authenticated: true; Details: null; Granted Authorities: ROLE_ADMIN)
2015-12-10 14:57:47,806 [http-bio-8090-exec-9] DEBUG hierarchicalroles.RoleHierarchyImpl - getReachableGrantedAuthorities() - From the roles [RO
LE_ADMIN] one can reach [ROLE_ADMIN] in zero or more steps.
2015-12-10 14:57:47,846 [http-bio-8090-exec-9] DEBUG access.ExceptionTranslationFilter - Access is denied (user is not anonymous); delegating to AccessDeniedHandler
Message: Access is denied
Line | Method
->> 43 | decide in grails.plugin.springsecurity.access.vote.AuthenticatedVetoableDecisionManager
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 118 | processFilterChain in grails.plugin.springsecurity.rest.RestTokenValidationFilter
| 84 | doFilter . . . . . in ''
| 53 | doFilter in grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter
| 143 | doFilter . . . . . in grails.plugin.springsecurity.rest.RestAuthenticationFilter
| 62 | doFilter in grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter
| 148 | doFilter . . . . . in com.cabolabs.security.RestAuthFilter
| 82 | doFilter in com.brandseye.cors.CorsFilter
| 1145 | runWorker . . . . in java.util.concurrent.ThreadPoolExecutor
| 615 | run in java.util.concurrent.ThreadPoolExecutor$Worker
^ 744 | run . . . . . . . in java.lang.Thread