403 ответ на запрос «refresh_token» с Spring Security Rest в приложении Grails 3 - PullRequest
0 голосов
/ 09 декабря 2018

У меня возникли проблемы с выполнением запроса «refresh_token» с помощью Spring Security Rest в приложении Grails 3.У меня есть приложение с веб-интерфейсом и некоторыми конечными точками отдыха, а все остальное работает нормально.Веб-приложение работает должным образом, и когда я делаю запрос на вход в систему с помощью curl с

curl -i -X POST localhost:8080/api/login \
-H "Content-Type: application/json" \
-d '{"username":"johndoe", "password":"johndoepassword"}' 

, я получаю ожидаемый ответ (я усек токены):

{
 "username":"johndoe",
 "roles":["ROLE_USER"],
 "token_type":"Bearer",
 "access_token":"eyJhbGciOiJIUzI1NiJ9.xxxxxx",
 "expires_in":3600,
 "refresh_token":"eyJhbGciOiJIUzI1NiJ9.xxxx"
}

Inфактическое приложение, я могу добавить access_token в заголовок и без проблем проходить аутентификацию на протяжении сеанса.Тем не менее, я получаю 403, когда попадаю в конечную точку «обновить маркер» с помощью

curl -i -X POST localhost:8080/oauth/access_token \
-H "Content-Type: application/x-www-form-urlencoded"  \
-d "grant_type=refresh_token&refresh_token=eyJhbGciOiJIUzI1NiJ9.xxxx" 

В документах все это кажется довольно простым, но я, очевидно, что-то делаю не так.Вот то, что я считаю соответствующей частью моего конфигурационного файла:

grails.plugin.springsecurity.controllerAnnotations.staticRules = [
    [pattern: '/error',          access: ['permitAll']],
    [pattern: '/login',          access: ['permitAll']],
    [pattern: '/login/**',          access: ['permitAll']],
    [pattern: '/oauth/**',          access: ['permitAll']],
    [pattern: '/user/register',          access: ['permitAll']],
    [pattern: '/user/register/**',          access: ['permitAll']],
    [pattern: '/user/submitRegistration',          access: ['permitAll']],
    [pattern: '/logoff',          access: ['permitAll']],
    [pattern: '/shutdown',       access: ['permitAll']],
    [pattern: '/assets/**',      access: ['permitAll']],
    [pattern: '/**/js/**',       access: ['permitAll']],
    [pattern: '/**/css/**',      access: ['permitAll']],
    [pattern: '/**/images/**',   access: ['permitAll']],
    [pattern: '/**/favicon.ico', access: ['permitAll']],
    [pattern: '/surveyAdmin/**',  access: ['ROLE_ADMIN']] ,
    [pattern: '/**',               access: ['ROLE_USER']]
]

grails.plugin.springsecurity.filterChain.chainMap = [
    [pattern: '/assets/**',      filters: 'none'],
    [pattern: '/**/js/**',       filters: 'none'],
    [pattern: '/**/css/**',      filters: 'none'],
    [pattern: '/**/images/**',   filters: 'none'],
    [pattern: '/**/favicon.ico', filters: 'none'],

    [
            pattern: '/api/**',
            filters: 'JOINED_FILTERS,-anonymousAuthenticationFilter,-exceptionTranslationFilter,-authenticationProcessingFilter,-securityContextPersistenceFilter,-rememberMeAuthenticationFilter'
    ],

    [
            pattern: '/rest/**',
            filters: 'restTokenValidationFilter,restExceptionTranslationFilter,filterInvocationInterceptor'
    ],
    [pattern: '/**',             filters: 'JOINED_FILTERS']
]

Кто-нибудь может подсказать путь здесь?

Спасибо, Алекс

1 Ответ

0 голосов
/ 10 декабря 2018

Как это часто бывает, я нашел ответ вскоре после публикации вопроса.Я использую пользовательский класс пользователя, который реализует org.springframework.security.core.userdetails.UserDetails, но не расширяет org.springframework.security.core.userdetails.User.Плагин предполагает, что принципал может быть приведен к объекту «Пользователь», что приводило к сбою генерации пользовательского поиска / токена.Либо изменив мой пользовательский класс для расширения User, либо переопределив метод refreshToken в плагине, чтобы принять мой пользовательский класс, чтобы все заработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...