Serviço de Identificação
Como o processo de identificação de usuários se tornou mais flexível e robusto
Introdução
Identificar quem está acessando algum recurso é uma parte muito importante no desenvolvimento de sistemas. Este trabalho é chamado de autenticação e normalmente acontece assim que você informa o nome do seu usuário e a sua senha. Essas duas informações combinadas são chamadas de credenciais.
Depois que o usuário é identificado, é preciso saber a quais recursos ele tem acesso. Este trabalho se chama autorização.
Autenticação e autorização são partes de um serviço chamado de identificação, que é muito importante para proteger qualquer recurso de sua aplicação ou sistema e de quebra registrar as ações de determinado usuário.
Observação: Aqui nos referimos aos termos “aplicação”, “sistema” e “software” de forma intercambiável, podendo referir-se a um aplicativo mobile, um sistema web, um sistema desktop, uma API ou qualquer variação ou combinação deles. O próprio serviço de identificação é uma aplicação dependendo da forma que for implementado.
Como funciona
Para verificar se as credenciais de um usuário estão corretas, ele envia seu nome e senha para o serviço de identificação.
Este por sua vez, tendo a lista de usuários e senhas, procura primeiro o nome de usuário e se ele existir, verifica se ele informou a senha correta. Se tudo estiver ok, o usuário estará autenticado. Agora o acesso a cada recurso depende da autorização.
Aspectos da implementação
Alguns aspectos de implementação devem ser considerados no uso de um sistema de identificação, principalmente com relação à integração com o sistema, armazenamento e segurança.
Integração
Com relação à integração do serviço de identificação na aplicação, ela pode ser implementada de forma embutida ou compartilhada.
Embutida: O serviço de identificação está mesclado ao restante do código do sistema. Indicado para aplicações pequenas, onde o número de usuários não passa de cinquenta.
Compartilhada: Diversas aplicações usam o mesmo serviço de identificação. Ideal para sistemas onde o número de usuários passa de cinquenta.
Armazenamento e segurança
A listagem de credenciais, que será consultada quando um usuário tentar se autenticar, pode ser armazenada no próprio código, em um arquivo de texto ou em um banco de dados.
Com relação à segurança, a senha do usuário pode ser armazenada de forma pura ou criptografada.
Autorização
Depois que um desafio de autenticação é vencido, ou seja, depois que as credenciais estão ok, ele ganha uma chave. Com essa chave o serviço de identificação é capaz de autorizar o acesso a determinado recurso do sistema para este usuário. Em alguns casos a autorização é implementada manualmente, em outros ela é feita automaticamente.
Evolução da implementação
Quando existiam somente aplicações desktop e console, era comum armazenar as credenciais no próprio código ou em bancos de dados. Isso era feito porque dificilmente um usuário comum teria acesso a essas credenciais. Elas só eram acessadas através da aplicação, no momento em que o usuário faz login no sistema.
Com o surgimento dos sistemas web, as credenciais puderam ainda serem armazenadas em arquivos texto no servidor web, ainda sendo acessadas somente através da aplicação, quando se tentava autenticar, ou seja, o usuário continuaria não tendo acesso direto à listagem de credenciais.
Quando surgiram as aplicações mobile e as APIs, alguns desafios surgiram. No início usou-se a mesma abordagem dos sistemas desktop. As credenciais eram armazenadas no código ou em bancos de dados, porém, a própria natureza mobile dos dispositivos obrigou o surgimento de novos padrões. E qual era o problema?
O serviço de identificação, assim como o próprio servidor das aplicações até agora estavam restritos à rede interna da empresa deveriam ser acessados de qualquer lugar, desde que houvesse conexão com a internet.
Muitas vezes as plataformas eram espelhadas, existindo em suas versões desktop, mobile, web e com APIs. Um exemplo desta abordagem é o Spotify™.
Com essas mudanças, tornou-se necessária uma abordagem mais robusta e flexível para o serviço de identificação. Uma abordagem que permitisse a autenticação em qualquer plataforma e de qualquer lugar.
Padrões Identity
A partir dessa necessidade, a partir de 2007 foram criados padrões de autenticação e autorização.
Deve-se exaltar a importância destes padrões, pois antes dele, qualquer desenvolvedor deveria implementar o serviço de identificação da sua maneira, mesmo sabendo da fragilidade desta abordagem.
Outra característica importante é que administradores de sistema, mesmo podendo ver a senha do usuário, não a entendem, pois estão criptografadas.
Funcionalidades
Algumas funcionalidades importantes também passaram a fazer parte do serviço de identificação:
Múltiplos pontos de autorização usando um serviço centralizado de identificação
Senhas criptografadas
Troca de senha pelo próprio usuário
Recuperação de senha. (Não existe. Deve ser trocada.)
Confirmação de usuário
Bloqueio
Não faça de jeito nenhum
Por questões de segurança, algumas atividades não devem ser feitas por usuários e desenvolvedores
Nunca armazenar a senha em seu estado puro. Caso o usuário esqueça a senha, deve ser dada a ele a opção de recuperar (na verdade trocar) a senha.
O usuário não deve fornecer nunca a sua senha.
Sempre que possível criar o serviço de identificação como um módulo separado do sistema
Operis Identity
Operis oferece uma solução de identificação que segue todos os padrões e pode ser acoplada a sistemas existentes e novos.
Resumo
Autenticação é o trabalho de identificar quem está acessando algum recurso, enquanto autorização é saber o que este usuário pode acessar.
Existem diversas armadilhas na hora de implementar um sistema de identificação. A principal delas é usar o armazenamento de senhas puras.
Existem padrões para a implementação de serviços de identificação.