Aspectos de Segurança: OpenID Connect
O protocolo OpenID Connect possibilita a autenticação de usuários em aplicações.
Na abordagem tradicional, isto é, sem uso do OpenID Connect, se um usuário acessa várias aplicações então ele deve fazer um cadastro em cada uma delas, fornecendo seus dados (nome, e-mail, telefone, etc) e definindo senhas (uma para acada aplicação).
Com o OpenID Connect, as aplicações podem "terceirizar" o processo de autenticar usuários. Provedores de Identidade, como Google, Facebook, Amazon, Twitter, fornecem esse tipo de serviço. Isso é bastante prático pois essas empresas possuem, no conjunto, bilhões de pessoas já cadastradas.
Tecnicamente, o OpenID Connect é uma extensão do OAuth 2.0 que define uma forma padrão para se obter a identidade do usuário que deseja entrar em uma aplicação.
ID Token
O processo de autenticação gera como resultado o ID Token. O token corresponde, por analogia, à carteira de identidade do usuário. Ele possui as seguintes informações obrigatórias:
- um código que identifica o usuário, chamado de subject. Cada usuário possui um código único que nunca é alterado.
- URL da autoridade que assinou o token
- id client de cada aplicação cliente que poderá usar o token. Com isso, a mesma "carteira de identidade" permite o acesso à várias aplicações. O usuário "faz login" uma única vez.
- prazo de validade do token.
- quando o token foi gerado.
Além das informações acima, o token pode conter outras tais como dados adicionais (nome, e-mail, telefone, etc) do usuário.
O ID Token é representado no formato JSON Web Token. Como o nome indica, o formato JSON é usado para organizar as informações do token.
Todo token deve ser assinado usando o padrão JSON Web Signature (JWS). Ele pode também ser criptografado usando o padrão JSON Web Encryption (JWE).
Obter um ID Token
Para obter um ID Token utiliza-se o protocolo OAuth 2.0 e adiciona-se o parâmetro scope=openid na URL que ser enviada ao servidor de autorização. A resposta HTTP conterá, além do access token, o ID Token (no formato JWT).
Se a aplicação cliente também deseja obter outras informações pessoais do usuário autenticado então é possível definir quais informações no parâmetro scope. Por exemplo:
- scope=openid email : retorna o e-mail do usuário.
- scope=openid email phone : retorna o e-mail e o telefone do usuário.
- scope=openid profile : retorna várias informações, como gênero, data de nascimento, imagem, etc.
Leitura Obrigatória |
---|
Explicando OpenId Connect |
Leitura Sugerida |
---|
Fundação OpenID |
Especificação do Protocolo |
Usando OpenID Connect via Google |
Usando OpenID Connect via Facebook |