Несанкционированный статус при доступе к / oauth / token_key - PullRequest
0 голосов
/ 01 мая 2019

Я создаю Oauth-сервер, используя Spring с этим учебным пособием .

Во время реализации Resource Server я заметил, что конечная точка ключа токена (/ oauth / token_key) не была общедоступной.

На основе этого документа Я попытался добавить в AuthorizationServerConfigurerAdapter следующее:

security.tokenKeyAccess("permitAll()")
                .checkTokenAccess("hasAuthority('ROLE_TRUSTED_CLIENT')");

, а также:

security.tokenKeyAccess("isAnonymous() || hasAuthority('ROLE_TRUSTED_CLIENT')")
               .checkTokenAccess("hasAuthority('ROLE_TRUSTED_CLIENT')");

Обе конфигурации сделалине работал.Я также попытался добавить правило в свой WebSecurityAdapter:

protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/oauth/token_key").permitAll();
}

Теперь я увижу диалоговое окно с запросом логина и пароля, и когда я нажму кнопку Отмена, я получу следующее:

There was an unexpected error (type=Unauthorized, status=401).
Unauthorized
org.springframework.security.access.AccessDeniedException: You need to authenticate to see a shared key
    at org.springframework.security.oauth2.provider.endpoint.TokenKeyEndpoint.getKey(TokenKeyEndpoint.java:58)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    (...)

Я что-то упустил?

1 Ответ

0 голосов
/ 02 мая 2019

После некоторого исследования я обнаружил проблему: я забыл вставить keyPair в tokenConverter, используемый для преобразования в JWT, и добавить дополнительную информацию о пользователе:

//Inside AuthorizationServerConfigurerAdapter

@Autowired
private MyJwtTokenEnhancer jwtTokenEnhancer;
@Autowired
private KeystoreService keystoreService;

@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) {
        //this line solved the issue
        jwtTokenEnhancer.setKeyPair(keystoreService.getKeyPair());

        endpoints.authenticationManager(manager)
            .accessTokenConverter(jwtTokenEnhancer)
            .tokenStore(tokenStore())
            .addInterceptor(new AuditInterceptor());
}
...