with single secure mkyong example baeldung and java spring spring-mvc oauth spring-security

java - single - Flujo implícito de Spring Oauth2



spring security 5 oauth2 example (1)

Trabajando en la implementación de Oauth2 con Spring. Quiero implementar el flujo de trabajo implícito:

Mi archivo de configuración:

@Configuration @EnableAutoConfiguration @RestController public class App { @Autowired private DataSource dataSource; public static void main(String[] args) { SpringApplication.run(App.class, args); } @RequestMapping("/") public String home() { return "Hello World"; } @Configuration @EnableResourceServer protected static class ResourceServer extends ResourceServerConfigurerAdapter { @Autowired private TokenStore tokenStore; @Override public void configure(ResourceServerSecurityConfigurer resources) throws Exception { resources.tokenStore(tokenStore); } @Override public void configure(HttpSecurity http) throws Exception { // @formatter:off http.authorizeRequests().antMatchers("/oauth/token").authenticated() .and() .authorizeRequests().anyRequest().permitAll() .and() .formLogin().loginPage("/login").permitAll() .and() .csrf().disable(); } } @Configuration @EnableAuthorizationServer protected static class OAuth2Config extends AuthorizationServerConfigurerAdapter { @Autowired private AuthenticationManager auth; private BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); @Bean public JdbcTokenStore tokenStore() { return new JdbcTokenStore(DBConnector.dataSource); } @Bean protected AuthorizationCodeServices authorizationCodeServices() { return new JdbcAuthorizationCodeServices(DBConnector.dataSource); } @Override public void configure(AuthorizationServerSecurityConfigurer security) throws Exception { security.passwordEncoder(passwordEncoder); } @Override public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception { endpoints.authorizationCodeServices(authorizationCodeServices()) .authenticationManager(auth).tokenStore(tokenStore()) .approvalStoreDisabled(); } @Override public void configure(ClientDetailsServiceConfigurer clients) throws Exception { // @formatter:off clients.jdbc(DBConnector.dataSource) .passwordEncoder(passwordEncoder) .withClient("my-trusted-client") .secret("test") .authorizedGrantTypes("password", "authorization_code", "refresh_token", "implicit") .authorities("ROLE_CLIENT", "ROLE_TRUSTED_CLIENT") .scopes("read", "write", "trust") .resourceIds("oauth2-resource") .accessTokenValiditySeconds(0); // @formatter:on } } @Autowired public void init(AuthenticationManagerBuilder auth) throws Exception { // @formatter:off auth.jdbcAuthentication().dataSource(DBConnector.dataSource).withUser("dave") .password("secret").roles("USER"); // @formatter:on } }

Esto está funcionando hasta ahora. Un usuario también se genera en la base de datos.

El problema es seguir. Cuando intento hacer la siguiente solicitud:

http: // localhost: 8080 / oauth / token? grant_type = authorization_code & client_id = my-trusted-client & username = dave & password = secret

Siempre aparece una ventana emergente (autenticación) que me pide que ingrese un nombre de usuario y una contraseña. Pero no importa lo que ingrese allí, nunca paso. Entonces, ¿qué está mal allí?

Me gustaría tenerlo, que cuando llamo a esta URL, me devuelve mi access_token.


En caso de flujo implícito, todos los tokens se generarán a través de la url de autorización en lugar de la urna token. por lo tanto, debe presionar ../oauth/authorize endpoint con el tipo de respuesta implícita. es decir

../oauth/authorize?response_type=implicit&client_id=trusted_client&redirect_uri=<redirect-uri-of-client-application>.

Obtendrá la contraseña de nombre de usuario emergente porque token endpoint ya está protegido a través del BasicAuthenticationFilter de primavera y espera que pase su client_id como nombre de usuario y client_secret como contraseña. En lugar del extremo token, debe proteger el punto final de autorización, de modo que la configuración de seguridad del punto final se dé como ...

@Override public void configure(HttpSecurity http) throws Exception { // @formatter:off http.authorizeRequests().antMatchers("/oauth/authorize").authenticated() .and() .authorizeRequests().anyRequest().permitAll() .and() .formLogin().loginPage("/login").permitAll() .and() .csrf().disable(); }