OAuth 2.0 Proteja suas aplicações com o Spring Security OAuth2
Adolfo EloySobre o livro
Quando tive a necessidade de proteger recursos de uma aplicação com OAuth 2.0, em um projeto em que trabalhei, ele já seguia a stack do Spring, sendo natural utilizar a implementação de OAuth 2.0 do próprio Spring Security OAuth. Porém, ler a documentação da biblioteca e escrever código não foram suficientes para que eu tivesse um entendimento satisfatório sobre o assunto. Por isso, acabei buscando referências em livros sobre segurança e nas especificações descritas através de RFCs, em especial a RFC 6749.
RFC, ou Request For Comments, trata-se de documentos que podem ser criados por comunidades ou empresas para especificar protocolos, algoritmos, frameworks e tudo mais que possa ser padronizado.
A motivação para a escrita do livro foi condensar, em um material, teoria e prática a respeito de OAuth 2.0, utilizando o projeto Spring Security OAuth2. Ler especificações, por exemplo, pode ser muito cansativo para algumas pessoas (e ainda não há códigos de exemplo para facilitar o entendimento). Em contrapartida, contar apenas com exemplos de código da internet também pode não ser o melhor caminho (ainda mais quando se trata de segurança).
Ao ler este livro, o desenvolvedor poderá entender como usar o OAuth 2.0 em cenários específicos, bem como entender o porquê de proteger recursos com OAuth 2.0. Durante o dia a dia e mesmo lendo sobre o OAuth na internet, percebe-se que, apesar de o assunto não ser novo, ainda existe bastante confusão e até mesmo cenários de mau uso da tecnologia. A própria especificação do OAuth 2.0 já nasceu de uma forma um pouco confusa e até contraditória para alguns ex-contribuidores da RFC 6749.
Como exemplo de confusão, muitos ainda podem se perguntar se OAuth 2.0 é um protocolo ou um framework. Além disso, alguns desenvolvedores também acreditam que OAuth deve ser utilizado para autenticação. Será que deve ser usado para autenticação ou autorização? O papel do livro é desmistificar todas essas perguntas, como alertar para o uso seguro da tecnologia.
Ainda em 2017, muitas empresas que utilizam OAuth 2.0 deixam brechas de segurança justamente por não se atentarem a detalhes tão pequenos, mas de extrema importância.
Público-alvo
O livro é indicado tanto para desenvolvedores que ainda não conhecem OAuth 2.0 quanto para aqueles que já vêm utilizando pontualmente em algumas aplicações. Acredito que mesmo desenvolvedores que já o tenham usado em seus projetos podem se beneficiar da leitura, pelo fato de serem apresentados vários fluxos diferentes de utilização do protocolo e pontos importantes de segurança.
Apesar de o protocolo OAuth 2.0 estar presente nos projetos há bastante tempo, volta e meia ainda aparecem notícias em blogs de segurança apresentando brechas em sistemas grandes que protegem suas APIs com OAuth.
Como os exemplos são dados utilizando uma aplicação construída em Java com o framework Spring, é interessante que você tenha conhecimento básico do funcionamento do Spring. Não é necessário que você tenha conhecimento de todo o framework Spring, mas é importante conhecer como funciona o mecanismo de injeção de dependências oferecido pelo framework, e como o Spring gerencia os objetos mantidos no contexto da aplicação (objetos que também são chamados de beans dentro do framework).
Quanto ao Spring MVC e ao Spring Security, um conhecimento básico também ajuda. Caso não tiver experiência com esses frameworks, não se preocupe, pois sempre que possível farei uma introdução breve sobre o assunto que estiver sendo abordado. Também é interessante que você já tenha uma certa familiaridade com JPA, já que os exemplos apresentados usam um banco de dados relacional. Para ajudá-lo durante a leitura, deixei todos os exemplos utilizados no livro disponíveis no GitHub.
Alguns detalhes pontuais sobre Spring Security são apresentados no decorrer do livro, porém o funcionamento do Spring e do Spring MVC não são abordados, pois para isso seria necessário escrever um outro livro. Aliás, quanto ao Spring MVC, a Casa do Código já possui uma publicação bem legal do Alberto Souza que pode ser conferida em https://www.casadocodigo.com.br/products/livro-spring-mvc.
Sumário
- 1 Introdução
- 1.1 Como as APIs são protegidas
- 1.2 Acessando uma API de um jeito diferente
- 1.3 Repassando credenciais, um exemplo de anti-pattern
- 1.4 Delegação de acesso a recursos protegidos
- 1.5 Soluções para delegação de acesso
- 1.6 OAuth como solução e sua evolução para o OAuth 2.0
- 1.7 Suporte a diferentes tipos de aplicação
- 1.8 Facilidade para o desenvolvedor
- 1.9 Extensibilidade
- 1.10 Conclusão
- 2 O framework de autorização OAuth 2.0
- 2.1 Papéis definidos pelo OAuth 2.0
- 2.2 Registro do Client no Authorization Server
- 2.3 Grant types
- 2.4 Fluxo básico para obtenção do access token
- 2.5 Utilização do token de acesso
- 2.6 Autenticação ou autorização
- 2.7 Conclusão
- 3 Iniciando o projeto de exemplo
- 3.1 Estrutura básica do projeto
- 3.2 O projeto Lombok
- 3.3 Spring Boot
- 3.4 Configuração do banco de dados
- 3.5 Modelo de classes do projeto
- 3.6 Subindo a aplicação
- 3.7 A criação da API
- 3.8 Conclusão
- 4 Proteja a aplicação com Spring Security
- 4.1 Configuração da aplicação usando XML
- 4.2 Configuração efetiva com anotações
- 4.3 Recuperar os dados do Resource Owner
- 4.4 Conclusão
- 5 Exemplo de aplicação cliente
- 5.1 O funcionamento da aplicação client
- 5.2 Integração repassando as credenciais
- 5.3 Conclusão
- 6 O Spring Security OAuth2
- 6.1 Authorization Server e Resource Server juntos
- 6.2 Authorization Server e Resource Server separados
- 6.3 Configuração do Spring Security OAuth2
- 6.4 Configuração do Resource Server
- 6.5 Configuração inicial do Authorization Server
- 6.6 Registro do Client no Authorization Server
- 6.7 Conclusão
- 7 Password credentials grant type
- 7.1 Configurando o Authorization Server
- 7.2 Entendendo cada etapa do grant type Password
- 7.3 Implementação do Client
- 7.4 Quando usar o grant type Password
- 7.5 Conclusão
- 8 Funcionamento interno do Spring Security OAuth2
- 8.1 Acesso aos recursos de usuário específico
- 8.2 Conclusão
- 9 Authorization Code grant type
- 9.1 Visão geral das etapas do grant type Authorization Code
- 9.2 Configurando o Authorization Server
- 9.3 Etapa de autorização
- 9.4 Etapa de solicitação do token
- 9.5 Utilizando o token de acesso
- 9.6 Implementação do Client
- 9.7 Quando usar o grant type Authorization Code
- 9.8 Conclusão
- 10 Implicit grant type para aplicações no Browser
- 10.1 Configurando o Authorization Server
- 10.2 Etapa de autorização e solicitação do token
- 10.3 Erros durante a etapa de autorização
- 10.4 Implementação do Client
- 10.5 Quando usar o grant type Implicit
- 10.6 Conclusão
- 11 Client Credentials
- 11.1 Implementação do novo serviço para aplicações internas
- 11.2 Solicitação do token de acesso
- 11.3 Implementação do Client
- 11.4 Quando usar o grant type Client Credentials
- 11.5 Conclusão
- 12 Refresh Tokens e escopos para aumentar a segurança
- 12.1 Quando usar refresh tokens e como configurar
- 12.2 Adicionando suporte a refresh token
- 12.3 Validando os escopos durante o acesso a uma API
- 12.4 Configuração dos endpoints com escopos
- 12.5 Configurando roles para os usuários
- 12.6 Relacionando escopos e roles
- 12.7 Conclusão
- 13 Adicionando suporte a banco de dados no projeto
- 13.1 A definição do banco de dados
- 13.2 Criando o banco de dados para o Authorization Server
- 13.3 Configurando a aplicação para usar o banco de dados
- 13.4 Configuração do Authorization Server
- 13.5 Conclusão
- 14 Client com o Spring Security OAuth2
- 14.1 Situação atual do Client
- 14.2 Iniciando a configuração do Spring Security OAuth2 para o Client
- 14.3 Usando o banco de dados para manter os dados do token do usuário
- 14.4 Requisição usando OAuth2RestTemplate nos bastidores
- 14.5 Conclusão
- 15 Alternativas para validação de tokens
- 15.1 Introspecção de tokens
- 15.2 Introspecção com o Spring Security OAuth2
- 15.3 Testando o endpoint check_token
- 15.4 Como usar a validação remota
- 15.5 Quando usar a abordagem de validação remota
- 15.6 Tokens autocontidos com JWT
- 15.7 Usando JWT com Spring Security OAuth2
- 15.8 Adicionando claims customizadas
- 15.9 Conclusão
- 16 OAuth 2.0 como base para autenticação
- 16.1 Por que não usar OAuth 2.0 para autenticação?
- 16.2 OpenID Connect como solução para autenticação
- 16.3 Fluxo de autenticação usando OpenID Connect
- 16.4 Interações dinâmicas entre Relying Party e Identity Provider
- 16.5 Autenticação com uma conta Google
- 16.6 Obtendo os dados de autenticação do usuário
- 16.7 Conclusão
- 17 Algumas considerações sobre segurança
- 17.1 Modelo de ameaças de segurança para o protocolo OAuth 2.0
- 17.2 Análise da aplicação bookserver
- 17.3 A importância da URI de redirecionamento
- 17.4 A importância do parâmetro state
- 17.5 Detalhes importantes para o Client
- 17.6 Conclusão
- 18 Bibliografia
Dados do produto
- Número de páginas:
- 366
- ISBN:
- 978-85-94188-12-0
- Data publicação:
- 09/2017