IdentityServer4 - JpProject
O JpProject é um projeto Open Source com o objetivo de diminuir o tempo de setup do IdentityServer4.
O IdentityServer4 para quem não conhece é uma implementação de OAuth2 e OpenId Connect em C#.
Veja mais sobre o IdentityServer4
Por que?
Tempo! O seu tempo e do teu time é precioso. O objetivo é ajudar times e startups a focar no que realmente importa para o negócio.
Quantas vezes você teve uma grande ideia?
Será que já passou algo assim por sua cabeça:
- Vou criar um sistema de lanches online!
- Vou criar um aplicativo Android para pagar contas!
- Minha ideia é conectar pessoas daqui com profissionais dali tudo através da minha plataforma!
Na hora de por a grande ideia em pratica. Durante o levantamento. Você e tua equipe percebem que serão obrigados a lidar com um problema que nem faz parte do teu projeto: Fluxo de login do usuario.
Autenticar, cadastrar, validar...
O usuario tem que se cadastrar. Ele precisa recuperar a senha. Ele pode acessar através de redes sociais.
Quanto tempo leva criar uma tela de Login? Umas 8 horas? Mas não é apenas o login, tem que ter a tela para se cadastrar, mais 8 horas. Ah mas isso é apenas o frontend. E o backend? O projeto padrão do Identity com ASP.NET Core mistura as responsabilidades. O ideal seria componentizar. Separar as responsabilidades. Quanto tempo? Mais umas 30 horas?
E se o usuario esquecer a senha? Enviar e-mail de recuperação de senha! mais 8 horas. Mas o e-mail dele foi confirmado após ter criado seu usuário? Não ? Mais uma tela para confirmar o e-mail, o backend para enviar o e-mail e mudar o fluxo de login para bloquear o acesso enquanto não confirma o e-mail. Mais 8 horas ai na conta.
Haverá perfis diferentes? Usuario Comum
, Administrador
e Supervisor
? Então tem que desenvolver roles. E lá se vai mais 16 horas.
E a questão da segurança? Vai armazenar o usuario e senha como? text-plain?... Ah nem pensou nisso.
Bom, nesse momento já é possivel perceber que um monte de problemas relacionados a isso apareceram e o pior ainda esta por vir:
Desenvolver isso, definitivamente, não é o foco do teu problema. É o mal necessário.
Tá e como resolver esse problema?
É por isso que o Jp Project foi criado!
Autenticação não é meu problema. Meu problema é Autorização
Se você está num ambiente corporativo, provavelmente autenticar já não é seu problema. Você, junto com sua equipe decidiu que Microsserviços ou SOA é o novo caminho.
Logo um OAuth2 é o primeiro passo a ser tomado. Você vai precisar ter controle sobre suas api's. Autenticar e autorizar Clients e Api's será o novo desafio.
O IdentityServer4 vem para suprir a necessidade de OAuth2 e OpenId Connect. O Frontend AdminUI e a api do Jp Project fornecem features para administrar seu servidor OAuth2 do IdentityServer4. Opcionalmente você pode utilizar o frontend SSO e o User Management.
O que é?
O projeto Jp Project é uma iniciativa para ajudar a comunidade na implementação de Identity Server4 com tecnologias da Microsoft.
A finalidade do projeto é ser um ecossistema completo para criação, gerenciamento e manutenção de usuários e da estrutura do IdentityServer4.
O projeto tem três soluções.
SSO
Responsável pela autenticação de usuário. É uma autenticação como serviço. Um Single Sign-on & Sign-out. Permite que os usuários se autentiquem através de suas redes sociais (Federation Gateway). Emite um JWT para suas aplicações com as informações do usuário.
Ah, mas não quero usar essa telinha dele para meu usuário se autenticar.
Sem problemas, basta utilizar o Password Flow do OAuth2.
LGPD diz que você deve informar ao usuário tudo que irá armazenar dele. Ao fazer o login, opcionalmente é possivel exibir uma tela de Consent exibindo e pedindo a permissão de todas informações que o seu Client irá precisar do usuário.
Algumas imagens:
User Management - Auto Gerenciamento do usuário.
Ele vem com um Frontend para ajudar teu usuário a resolver os problemas de autenticação.
- Recuperar senha
- Confirmação de e-mail
- Painel de manutenção do usuario.
- Trocar foto de perfil
- Modificar nome, biografia etc
- Alterar senha
- Deletar sua conta (LGPD ai)
Painel de administração de Usuários
E por fim e não menos importante, um painel de administração para você sua equipe ter total controle dos usuários, api's e clients.
OpenApi
A utilização dos frontends é opcional. É possivel fazer integração através da api que ele disponibiliza.
Docker
Se o objetivo é diminuir o tempo de setup, por que implantar seria dificil? Ao todo são 4 projetos:
- SSO
- Api
- Frontend usuario
- Frontend Administrativo
Cada um destes vem com um docker e todos disponiveis no docker-hub.
Banco de dados
Disponivel para Sql Server, MySql e Postgree.
Para decidir qual utilizar basta alterar o arquivo de configurações e iniciar a aplicação:
- Dockerfile
- Painel de administração do Azure
- App.Config da aplicação.
Todo setup inicial é baseado nos arquivos de configurações.
Traduções
Todos os frontends estão disponiveis em 8 idiomas.
- Inglês
- Portugues
- Espanhol
- Francês
- Holandês
- Russo
- Chinês Tradicional
- Chinês simplificado
Azure DevOps
Se você fizer um fork e fazer sua customização. Logo, tela de apresentação etc. Os arquivos de pipelines do Azure estão disponiveis com a geração dos artefatos. Facilitando a sua implantação.
Roadmap
As futuras versões do projeto estão previstas as features:
- Mais fatores de autenticação
- OTP
- SMS
- Implementação de testes de frontend
- Maior cobertura de testes backend