https://github.com/alexsimao/basic-auth-api
Esta aplicação de estudo demonstra como configurar e utilizar o Spring Security em uma aplicação Spring Boot para autenticação e autorização de usuários, utilizando tokens JWT. A aplicação define diferentes níveis de acesso para usuários com roles distintas, como ADMIN e USER, e protege endpoints com base nessas roles.
https://github.com/alexsimao/basic-auth-api
estudos-java java jwt jwt-token spring-boot spring-security
Last synced: 14 days ago
JSON representation
Esta aplicação de estudo demonstra como configurar e utilizar o Spring Security em uma aplicação Spring Boot para autenticação e autorização de usuários, utilizando tokens JWT. A aplicação define diferentes níveis de acesso para usuários com roles distintas, como ADMIN e USER, e protege endpoints com base nessas roles.
- Host: GitHub
- URL: https://github.com/alexsimao/basic-auth-api
- Owner: AlexSimao
- Created: 2025-02-08T01:27:31.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-05-23T03:44:15.000Z (about 1 year ago)
- Last Synced: 2025-08-05T09:38:46.377Z (10 months ago)
- Topics: estudos-java, java, jwt, jwt-token, spring-boot, spring-security
- Language: Java
- Homepage:
- Size: 42 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Spring Security Application
Esta aplicação é um exemplo de como configurar e utilizar o Spring Security para autenticação e autorização de usuários em uma aplicação Spring Boot. A aplicação utiliza tokens JWT (JSON Web Tokens) para autenticação e define diferentes níveis de acesso para usuários com diferentes roles (papéis).
## Funcionalidades
- **Autenticação de Usuários**: Os usuários podem se autenticar utilizando suas credenciais (email e senha) para obter um token JWT.
- **Autorização de Usuários**: A aplicação define diferentes níveis de acesso para usuários com diferentes roles (papéis), como ADMIN e USER.
- **Proteção de Endpoints**: Os endpoints da aplicação são protegidos com base nas roles dos usuários, garantindo que apenas usuários autorizados possam acessar determinados recursos.
- **Configuração Stateless**: A aplicação é configurada para ser stateless, ou seja, não mantém estado de sessão entre as requisições. Cada requisição é autenticada de forma independente utilizando tokens JWT.
## Endpoints
### `/auth/register` (POST)
- **Descrição**: Endpoint para registrar um novo usuário.
- **Acesso**: Apenas usuários com a role ADMIN podem acessar este endpoint.
- **Exemplo de Requisição**:
```json
{
"email": "user@example.com",
"password": "password123",
"role": "USER"
}
```
### `/auth/login` (POST)
- **Descrição**: Endpoint para autenticar um usuário e obter um token JWT.
- **Acesso**: Acesso público, qualquer usuário pode acessar este endpoint para se autenticar.
- **Exemplo de Requisição**:
```json
{
"email": "user@example.com",
"password": "password123"
}
```
### `/user` (GET)
- **Descrição**: Endpoint para obter informações do usuário autenticado.
- **Acesso**: Apenas usuários com a role ADMIN podem acessar este endpoint.
- **Exemplo de Requisição**:
```http
GET /user
Authorization: Bearer
```
## Configuração de Segurança
A configuração de segurança da aplicação é definida na classe `SecurityConfig`. Aqui estão os principais pontos da configuração:
### Desabilitar Proteção CSRF
```java
.csrf(csrf -> csrf.disable())
```
- **Descrição**: Desabilita a proteção CSRF (Cross-Site Request Forgery) para a aplicação. Isso é geralmente seguro para APIs RESTful que utilizam tokens JWT para autenticação.
### Configuração Stateless
```java
.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
```
- **Descrição**: Configura a política de sessão como stateless, ou seja, a aplicação não mantém estado de sessão entre as requisições. Cada requisição é autenticada de forma independente utilizando tokens JWT.
### Autorização de Requisições
```java
.authorizeHttpRequests(authorize -> authorize
.requestMatchers(HttpMethod.POST, "/auth/register").hasRole("ADMIN")
.requestMatchers(HttpMethod.POST, "/auth/login").permitAll()
.requestMatchers(HttpMethod.GET, "/user").hasRole("ADMIN")
.anyRequest().authenticated())
```
- **Descrição**: Define as regras de autorização para os endpoints da aplicação. Apenas usuários com a role ADMIN podem acessar o endpoint `/auth/register` e `/user`, enquanto o endpoint `/auth/login` é acessível por qualquer usuário.
### Filtro de Segurança
```java
.addFilterBefore(securityFilter, UsernamePasswordAuthenticationFilter.class)
```
- **Descrição**: Adiciona o filtro de segurança `SecurityFilter` antes do filtro `UsernamePasswordAuthenticationFilter` para verificar se o token do usuário é válido para a operação solicitada.
## Roles de Usuários
A aplicação define diferentes níveis de acesso para usuários com diferentes roles (papéis):
- **ADMIN**: Usuários com a role ADMIN têm acesso a todos os endpoints da aplicação, incluindo o endpoint de registro de novos usuários.
- **USER**: Usuários com a role USER têm acesso limitado aos endpoints da aplicação.
## Configuração de Beans
### `PasswordEncoder`
```java
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
```
- **Descrição**: Define um bean `PasswordEncoder` utilizando o `BCryptPasswordEncoder` para codificação de senhas.
### `AuthenticationManager`
```java
@Bean
public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration)
throws Exception {
return authenticationConfiguration.getAuthenticationManager();
}
```
- **Descrição**: Define um bean `AuthenticationManager` utilizando a configuração de autenticação fornecida pelo Spring Security.
## Conclusão
Esta aplicação demonstra como configurar e utilizar o Spring Security para autenticação e autorização de usuários em uma aplicação Spring Boot. Utilizando tokens JWT para autenticação e definindo diferentes níveis de acesso para usuários com diferentes roles, a aplicação garante que apenas usuários autorizados possam acessar determinados recursos.