Autenticação e Autorização
Implemente mecanismos seguros de autenticação de utilizadores (por exemplo, JWT) e de autorização para proteger os pontos de acesso do seu serviço Web.
Autenticação e Autorização é uma aula grátis de Learn Rust Coding no CoddyKit. Esta é a aula 3 de 3. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Learn Rust Coding, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Learn Rust Coding inclui 3 aulas no total.
Proteja seus serviços web
Boas-vindas! Nesta lição, vamos nos aprofundar em autenticação e autorização, conceitos essenciais para criar serviços web seguros em Rust.
Você aprenderá a proteger os pontos de acesso da sua API, garantindo que somente usuários legítimos possam acessá-los e apenas com as permissões corretas.
Autenticação versus autorização
Esses dois termos parecem semelhantes, mas têm significados diferentes:
- Autenticação: Verifica quem você é. É como mostrar seu documento de identificação para entrar em um prédio.
- Autorização: Determina o que você pode fazer. Depois de entrar, define em quais salas você pode entrar.
Implementaremos ambos para proteger nossos serviços web Rust.
Por que proteger suas APIs?
Proteger os pontos de acesso da sua API é essencial por vários motivos:
- Privacidade dos dados: Mantenha os dados sensíveis dos usuários protegidos contra acesso não autorizado.
- Integridade do sistema: Impeça que agentes mal-intencionados alterem ou corrompam seus dados.
- Conformidade: Atenda aos requisitos legais e regulatórios, como GDPR e HIPAA.
Uma camada de segurança robusta gera confiança e protege sua aplicação.
Tokens Web JSON (JWTs)
Um método popular de autenticação em serviços web modernos é o uso de Tokens Web JSON (JWTs), pronunciados "jot".
JWTs são uma forma compacta e segura para URLs de representar Claims que serão transferidas entre duas partes. Eles são frequentemente usados para autenticação sem estado.
Isso significa que o servidor não precisa armazenar informações de sessão para cada usuário.
Dentro de um JWT: cabeçalho, carga útil e assinatura
Um JWT é composto por três partes, separadas por pontos:
- Cabeçalho: Contém metadados sobre o token, como o tipo de token (JWT) e o algoritmo de assinatura, por exemplo, HS256.
- Carga útil: Contém as "Claims" — afirmações sobre uma entidade, geralmente o usuário, e dados adicionais.
- Assinatura: Usada para verificar se o token não foi adulterado. Ela é criada codificando o cabeçalho e a carga útil com uma chave secreta.
Gerando e verificando JWTs em Rust
Vamos ver como gerar e verificar um JWT usando a biblioteca jsonwebtoken em Rust. Lembre-se de adicionar jsonwebtoken, serde (com o recurso "derive") e chrono (com o recurso "serde") ao seu Cargo.toml.
Este exemplo gera um token e o verifica imediatamente em seguida.
use jsonwebtoken::{encode, decode, Header, EncodingKey, DecodingKey, Validation};
use serde::{Deserialize, Serialize};
use chrono::{Utc, Duration};
#[derive(Debug, Serialize, Deserialize)]
struct Claims {
sub: String, // Subject (user ID)
company: String,
exp: usize, // Expiration time
}
fn main() {
// --- Setup (requires crates: jsonwebtoken, serde, chrono) ---
let secret_key = "my_super_secret_key";
// --- 1. Generate a JWT ---
let my_claims = Claims {
sub: "user123".to_string(),
company: "CoddyKit".to_string(),
exp: (Utc::now() + Duration::minutes(10)).timestamp() as usize,
};
let token = encode(
&Header::default(),
&my_claims,
&EncodingKey::from_secret(secret_key.as_ref()),
).expect("Failed to encode token");
println!("Generated JWT:\n{}", token);
println!("\n--- Verifying the Token ---");
// --- 2. Verify the JWT ---
let validation = Validation::default();
let decoded_result = decode::<Claims>(
&token,
&DecodingKey::from_secret(secret_key.as_ref()),
&validation,
);
match decoded_result {
Ok(token_data) => {
println!("Token valid!");
println!("Subject: {}", token_data.claims.sub);
println!("Company: {}", token_data.claims.company);
},
Err(err) => println!("Token invalid: {:?}", err),
}
}Autorização: definindo o acesso
Depois que um usuário é autenticado (sabemos quem ele é), a autorização determina quais recursos ou ações ele tem permissão para acessar.
Entre os modelos comuns de autorização estão:
- Controle de acesso baseado em funções (RBAC): Os usuários recebem funções, como "administrador", "editor" ou "visualizador", e cada função tem permissões específicas.
- Controle de acesso baseado em atributos (ABAC): O acesso é concedido com base nos atributos do usuário, do recurso ou do ambiente.
Conceito de middleware de autorização
Em um serviço web, a autorização costuma ser tratada por um middleware. Trata-se de um código executado antes da função manipuladora da rota principal.
O middleware iria:
- Extrair a identidade do usuário autenticado, por exemplo, de um JWT.
- Verificar as funções ou permissões do usuário em relação ao acesso exigido pelo ponto de acesso solicitado.
- Se o acesso for autorizado, permitir que a solicitação prossiga; caso contrário, retornar um erro de "Não autorizado" ou "Acesso proibido".
Isso mantém suas funções manipuladoras de rotas limpas e concentradas na lógica de negócio.
Teste seus conhecimentos
Vamos verificar rapidamente sua compreensão sobre autenticação e autorização.
Recapitulação: protegendo serviços web
Parabéns! Nesta lição, abordamos os fundamentos da proteção dos seus serviços web em Rust:
- A diferença entre Autenticação (quem você é) e Autorização (o que você pode fazer).
- A importância de proteger os pontos de acesso da API.
- Como os JSON Web Tokens (JWTs) funcionam para autenticação sem estado, incluindo sua estrutura.
- Um exemplo prático em Rust de geração e verificação de JWTs.
- Os conceitos de Controle de Acesso Baseado em Funções e como o middleware pode implementar verificações de autorização.
Agora você está pronto para criar aplicações Rust mais seguras e robustas!
Perguntas Frequentes
A aula “Autenticação e Autorização” é grátis?
Sim — o texto completo de “Autenticação e Autorização” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Learn Rust Coding, atualize para CoddyKit PRO. O curso de Learn Rust Coding inclui 3 aulas no total.
O que vou aprender em “Autenticação e Autorização”?
Implemente mecanismos seguros de autenticação de utilizadores (por exemplo, JWT) e de autorização para proteger os pontos de acesso do seu serviço Web. Você pratica Learn Rust Coding com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Learn Rust Coding?
Nenhuma experiência prévia é necessária. Learn Rust Coding no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 3.
Quanto tempo leva a aula “Autenticação e Autorização”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Learn Rust Coding?
Sim. Cada aula de Learn Rust Coding inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- APIs REST com Actix-web/Rocket
- Integração com Bases de Dados (SQLx/Diesel)
- Autenticação e Autorização