1

Pitch: Publiquei minha primeira biblioteca Python

Recentemente, a empresa onde trabalho decidiu implantar um SSO para acesso aos sistemas internos. Com isso, começamos a integrar nossas aplicações ao novo provedor de identidade.

No entanto, com o surgimento de novos projetos, percebemos que o mesmo trabalho de implementar repetidamente os fluxos de autenticação OAuth 2.0 e OpenID Connect acabava se repetindo. Foi então que surgiu a ideia de desenvolver uma biblioteca simples e objetiva, capaz de agilizar esse processo e permitir que os desenvolvedores direcionassem seus esforços para a lógica de negócio da aplicação.

O FastOIDC é uma biblioteca Python que abstrai o fluxo de autenticação OAuth 2.0 + OpenID Connect, permitindo configurar clientes OAuth rapidamente em backends desenvolvidos com FastAPI.

A biblioteca implementa o fluxo de autenticação, utilizando PKCE e mecanismos de proteção contra CSRF, além de oferecer renovação automática de tokens e gerenciamento da sessão do usuário.

Até o momento, o FastOIDC foi testado com os seguintes provedores de identidade: Google, WSO2, Keycloak, Auth0 e GitHub. Na documentação mostro alguns exemplos para você copiar e rodar na sua máquina.

Para quem não conhece, o OAuth é um protocolo de autorização que permite que um aplicativo acesse seus dados em outra aplicação em seu nome de forma segura, sem você precisar fornecer sua senha.

Já o OpenID Connect (OIDC) é uma camada de autenticação construída em cima do OAuth 2.0, ou seja, ele diz a aplicação quem você é através de um ID Token, que é um JWT assinado contendo os dados básicos de que fez o login (e-mail, nome, foto de perfil, etc). Sabe quando você vai acessar um site e na página de login mostra um "Entrar com Google"? Isso é o OIDC.

Existem 4 papéis principais no OAuth:
1 - Resource Owner: Quem é dono dos dados e pode conceder o acesso a eles.
2 - Client: A aplicação que quer acessar seus dados e precisa do seu consentimento para isso.
3 - Authorization Server: O Servidor que verifica quem você é, obtém o consentimento e emite tokens de acesso para o client acessar seus dados (Exemplo: Google, Github, Keycloak, etc).
3 - Resource Server: O Servidor que contém dados protegidos que só podem ser acessados por quem fornecer um token de acesso válido (Exemplo: APIs do Google, API do Github, etc).

O fluxo OAuth + OIDC funciona da seguinte forma:

1 - Início do login: Quando você clica em "Entrar com o google", por exemplo, você é redirecionado para a tela de login com o google, onde você consentirá o acesso aos seus dados pela aplicação.
2 - Código de autorização: O Google redireciona você para a aplicação, passando um código temporário (authorization_code) na URL.
3 - Troca do código por tokens: A aplicação usa esse código para solicitar os tokens de acesso para o Google e recebe um access_token, um id_token e, opcionalmente, um refresh_token.
4 - Acesso aos dados: A aplicação valida o id_token, extrai os dados do usuário (e-mail, nome, foto de perfil, etc) e usa o access_token para acessar os recursos protegidos do Resource Server.

Abaixo está o diagrama que fiz para mostrar de forma didática o que cada papel faz no fluxo OAuth.

diagrama simplificado do fluxo OAuth

Quem quiser conhecer o projeto FastOIDC, utilizá-lo ou contribuir com seu desenvolvimento pode acessar o repositório no GitHub.

Alguns recursos interessantes sobre o tema abordado:

Carregando publicação patrocinada...