4
respostas

É possível customizar o endpoint "/oauth/token"

Olá,

Gostaria de customizar o endpoint /oauth/token para criar alguma regras e também persistir algumas informações no banco de dados.

Algo assim:

@RequestMapping(value = "/auth", method=RequestMethod.POST)
public AlgumaClasse auth(AlgunsParametros pars) {
    OAuth auth = super.executarRegraOriginal(pars); // Faz o mesmo que /oauth/token

    // Persistir informações no banco de dados, exemplo, o token.

    return algumaCoisa;
}

Desde já agradeço.

4 respostas

Oi Henrique,

A partir do Spring Security 5.1 é possível personalizar algumas solicitações de autorização e token do OAuth2:

https://www.baeldung.com/spring-security-custom-oauth-requests

Oi Otávio,

Eu segui os passos de acordo com o link que você manou, porém não consegui criar a classe que implementa de OAuth2AuthorizationRequestResolver, pois ela não existe no projeto.

Criei um projeto utilizando o Spring Starter Project com a versão 2.3.0.RELEASE incluindo as dependências do Spring Security e Cloud OAuth2.

O que estou fazendo de errado?

Oi Henrique

Tenta usuando essas dependências no pom.xml:

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.thymeleaf.extras</groupId>
            <artifactId>thymeleaf-extras-springsecurity5</artifactId>
        </dependency>

        <!-- oauth2 -->
        <dependency>
            <groupId>org.springframework.security.oauth.boot</groupId>
            <artifactId>spring-security-oauth2-autoconfigure</artifactId>
            <version>${oauth-auto.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-oauth2-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-oauth2-jose</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

Oi Otávio,

Muito obrigado pela disposição em ajudar, mas ainda estou com dificuldade de implementar o OAuth2.

Minha dificuldade é encaixar os conceitos do Spring Security do curso Spring Boot Parte 2: Segurança da API, Cache e Monitoramento com o Cloud OAuth2 vistos no curso desse fórum.

Eu gostaria de criar um endpoint dessa forma (exemplo do curso citado anteriormente).

Será que é possível?

@Autowired
private AuthenticationManager authenticationManager;

@RequestMapping(value = "/auth", method = RequestMethod.POST)
public ResponseEntity<Auth> auth(@RequestBody @Valid LoginForm form) {
    Auth auth = new Auth();

    UsernamePasswordAuthenticationToken dataLogin = form.converter();
    Authentication authenticate = authenticationManager.authenticate(dataLogin);
    User user = (User) authenticate.getPrincipal();

    // ...

    return ResponseEntity.ok(auth);
}

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software