Token não valida requisição

7 respostas Resolvido
spring-bootspringjava
J

Estou seguindo um curso de spring que possivelmente esta um pouco desatualizado. Mas vou me adaptando. Acontece que agora, estou com um problema que não consigo resolver/entender. Faço uma requisição de token, recebo o token, mas quando faço a requisição com o token que recebi me retona não autorizado.

Seguem as imagens: Aqui o token

Tentei passar no header:

Tentei também passar o token via authorization:

package com.example.algamoney.api.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.factory.PasswordEncoderFactories;
import org.springframework.security.crypto.password.PasswordEncoder;

@Configuration
public class ResourceServerConfig extends WebSecurityConfigurerAdapter {
    
    
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
        auth.inMemoryAuthentication()
        .withUser("admin").password(encoder.encode("admin")).roles("ROLES");
        
    }
    
    public void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
        .antMatchers("/categoria/*").permitAll()
        .anyRequest().authenticated()
        .and()
        .httpBasic().and()
        .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
        .csrf().disable();
    }
    
    @Bean
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }
    
}


package com.example.algamoney.api.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.crypto.factory.PasswordEncoderFactories;
import org.springframework.security.crypto.password.PasswordEncoder;
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;
import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer;
import org.springframework.security.oauth2.provider.token.TokenStore;
import org.springframework.security.oauth2.provider.token.store.InMemoryTokenStore;

@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {
    
    @Autowired
    @Qualifier("authenticationManagerBean")
    AuthenticationManager authenticationManager;
    
    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
        clients.inMemory()
            .withClient("angular")
            .secret(encoder.encode("@ngul@r0"))
            .scopes("read", "write")
            .authorizedGrantTypes("password")
            .accessTokenValiditySeconds(1800);
    }
    
    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints
        .tokenStore(tokenStore())
        .authenticationManager(authenticationManager);
    }
    
    @Bean
    public TokenStore tokenStore() {
        return new InMemoryTokenStore();
    }
    
}

Alguém saberia me ajudar?

Se precisar de mais informações posso passar Obrigado!

7 Respostas

V

Boa noite

Por coincidência estou fazendo o mesmo curso. O conteúdo dos videos está mesmo desatualizado, mas eles passam as informações atualizadas pelos repositórios do github ou pelo comentários embaixo dos videos.

https://github.com/tiagoadmstz/angular-spring-algaworks

J

Primeiramente obrigado pela resposta Villagram…
Eu conhecia esse github…
será que la tem a solução?

V

opa, esse é o meu repositório e o projeto funciona…então tenho certeza que conseguirá configurar o seu projeto.

S

Você está enviando uma senha diferente da configurada no Authorization Server em sua requisição. Tente substituir o valor de password em seu forma data por @ngul@r0.

J

Primeiro obrigado pela resposta SmartCode.
Eu conferi as senhas…

Primeiro a da requisição de token… segue a imagem

Quando chamado pelo postman gera esse token:

Ao tentar fazer a requisição com o token, a mensagem de não autorizado:

Esta errado? Onde?

J

Eu me confundi… na verdade eu tinha visto o github do pessoal da algaworks…
dei uma olhada no seu projeto mas ele ja esta com o jwt implementado…
eu queria corrigir o erro que esta dando no meu nesse ponto do curso em que estou entende?
Ainda não cheguei na parte do JWT…

J
Solucao aceita

Pessoal agradeço a ajuda de todos…
O erro estava em duas anotações na classe ResourceServerConfig

Ela teria que ter as anotações @EnableWebSecurity e
@EnableResourceServer ficando assim:

@Configuration
@EnableWebSecurity
@EnableResourceServer
public class ResourceServerConfig extends WebSecurityConfigurerAdapter {

protected void configure(AuthenticationManagerBuilder auth) throws Exception {
	PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
	auth.inMemoryAuthentication()
	.withUser("admin").password(encoder.encode("admin")).roles("ROLES");
	
}

public void configure(HttpSecurity http) throws Exception {
	http.authorizeRequests()
	.antMatchers("/categoria/*").permitAll()
	.anyRequest().authenticated()
	.and()
	.httpBasic().and()
	.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
	.csrf().disable();
}

@Bean
public AuthenticationManager authenticationManagerBean() throws Exception {
    return super.authenticationManagerBean();
}

}

Criado 22 de dezembro de 2020
Ultima resposta 23 de dez. de 2020
Respostas 7
Participantes 3