Você está aqui: Página Inicial > Transformação Digital > Ferramentas > Arquitetura de Serviço e Protocolos

Arquitetura de Serviço e Protocolos

OpenID Connect

O Openid Connect é um protocolo baseado no OAuth 2.0 que especifica autorização e autenticação. O objetivo principal é conectar com segurança os usuários de aplicações Web. Ele define como implementar o gerenciamento de autorizações de acesso, gerenciamento de sessão, fornecimento de informações sobre usuário logado, mecanismo de logout, etc. O OIDC permite executar o logon único dos usuários e apresenta o conceito de um id_token, que é um token de segurança que permite ao cliente verificar a identidade do usuário e obter informações básicas de perfil sobre o usuário. Ele também é interoperável pois segue o protocolo RestFull e usa o formato de saída de dados o JSON, que hoje é um padrão para aplicações web. Além disso, sua especificação suporta vários tipos de clientes, como aplicações que utilizam o browser, clientes javascript, aplicações mobile, etc. A Figura 1 ilustra as requisições da autenticação entre cliente e servidor.

OAUTH2

OAuth é um protocolo aberto para autorização que permite aos clientes obterem acesso a recursos protegidos do servidor em nome do proprietário do recurso. O proprietário do recurso pode ser um cliente ou usuário final. O Oauth também especifica como um usuário final pode autorizar o acesso de terceiros aos seus recursos do servidor sem precisar compartilhar suas credenciais. Atualmente ele está sendo usado largamente pelas grandes empresas como Google, Facebook, Microsoft, Twitter, etc., para permitir que os usuários compartilhem suas informações sobre suas contas com outras aplicações. A concessão da autorização feita pelo proprietário das informações é representada por outra credencial que pode ser usada para obter um recurso protegido. O Oauth fornece 4 estratégias para concessão de autorização: código de autorização, implícita, credenciais de senha do proprietário do recurso e credenciais do cliente. A estratégia usada no Brasil Cidadão é a Código de autorização, que utiliza um token.

Json Web Token - JWT

O JWT é um padrão aberto que define como transmitir objetos JSON de forma segura entre aplicações. A assinatura pode ser realizada usando uma palavra secreta ou uma chave publica/privada. O JWT é composto por 3 elementos:

Headers

São objetos JSON definidos por 2 atributos. O tipo do token (tpk) que é o JWT e o algorítimo (alg) de encriptação utilizado, como HMAC SHA256 ou RSA.

Exemplo:

{
"alg": "HS256",
"typ": "JWT"
}

Payload

São todos ou parte dos atributos de uma entidade representada por objetos JSON.

Exemplo:

{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}

Signature

Para criar a assinatura temos assinar o header codificado, o payload codificado e informar o secret, que no caso abaixo é uma palavra secreta definida na aplicação. A assinatura é criada para verificar se quem enviou a requisição é quem realmente diz ser.

HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)

O resultado dessa assinatura é um token como abaixo. O token é dividido em 3 partes separadas pelo ponto. As três partes equivalem ao hash do header, payload e a signature.

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

Sempre que for necessário acessar recursos protegidos, o cliente deve enviar o token gerado (JWT) através do atributo Authorizer do header da requisição, com a flag Bearer, como abaixo:

Authorization:Bearer
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ