Я пытаюсь разработать простой POC для сервера авторизации OAuth2 в Spring Boot с использованием @EnableAuthorizationServer
и клиента в памяти.
Мой класс конфигурации Web Security выглядит следующим образом:
package com.example.authservice;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration
@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http.antMatcher("/**")
.authorizeRequests().
antMatchers("/", "/login**", "/oauth/authorize", "/oauth/authorize**")
.permitAll().
anyRequest()
.authenticated();
}
}
И конфигурация сервера авторизации выглядит следующим образом:
package com.example.authservice;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer;
import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer;
@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter {
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.inMemory().
withClient("auth-client").
secret("secret-key").
authorizedGrantTypes("authorization_code").
scopes("openid");
}
}
Это основано на потоке предоставления кода авторизации и когда я пытаюсь получить код (который будет использоваться при следующем вызове для получения токена доступа),Я получаю несанкционированную ошибку.
curl -X GET \
'http://localhost:8080/oauth/authorize?client_id=auth-client&client_secret=secret-key&grant_type=authorization_code&response_type=code'
Ошибка:
{
"timestamp": "2019-03-20T15:35:41.009+0000",
"status": 403,
"error": "Forbidden",
"message": "Access Denied",
"path": "/oauth/authorize"
}
Я предположил, что, поскольку /oauth/authorize
разрешен в моей конфигурации веб-безопасности, он должен вернуть код, который можно использоватьполучить токен доступа.Кто-нибудь знает, что может быть не так.