Governo do Estado do Rio Grande do Sul

Início do conteúdo

Como usar

Protocolo OAuth2


O Login Cidadão Gov.br utiliza o protocolo OAuth 2, que é muito utilizado pelos fornecedores de mídias sociais, como Google, Facebook, Twiter, etc.

Esse protocolo possui descritos suas caraterísticas e especificações muito bem definidas em RFCs e, além disso, muitas outras informações e dicas de como utilizar esse tipo de autenticação podem ser encontrados na internet.

Deixamos aqui alguns links para conhecer melhor o Oauth2:

Uma introdução ao OAuth 2 
OAuth 2 – Guia do Iniciante 
Como funciona o protocolo OAuth 2.0 
Uma introdução OAuth 2.0 para iniciantes 

Especificação da RFC do protocolo OpenID 

Informações adicionais

Subject Identifier

Subject Identifier é como são chamados os identificadores dos End Users no OpenID Connect. No Login Cidadão Gov.br trabalha-se com o tipo Pairwise. Isto quer dizer, cada serviço ou grupo de serviços, recebe um identificador diferente para um mesmo usuário.

Ou seja, o usuário “123” poderá ser conhecido por “ABC” nos serviços do DETRAN enquanto no Tudo Fácil ele é conhecido por “XYZ” e no Blog do Zezinho, por “XPTO”.

Isto é fundamental para a preservação da privacidade dos usuários, dificultando que serviços sejam capazes de cruzar informações sem a devida autorização do usuário mesmo em um cenário de vazamento pois os identificadores são não-correlacionáveis.

Tipos de requisição

De um modo geral o Login Cidadão Gov.br aceita diferentes tipos de resposta:

  • code, id_token, token id_token

com tipos de permissão:

  • authorization_code, refresh_token, implicit

Abaixo é exemplificado o passo a passo para uma requisição code/authorization_code.

Passo-a-passo para integrar


O Login Cidadão Gov.br deve ser utilizado com a URL de homologação para validação de aplicações em desenvolvimento e após liberado, deve utilizar somente a URL de produção. As URLs são:

Passo 1

Solicitar a inclusão do serviço e obter o Client Id e Client Secret.

Dica: se a solicitação já foi concluída, o responsável pelo serviço deve obter o Client Id e Client Secret pelo Painel do Desenvolvedor

Passo 2

Utilize a url https://{​​​URL}​​​​​​​​​​/.well-known/openid-configuration para obter as configurações do OpenId.

O serviço retornará em formato JSON conforme exemplo:

{​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​
   "issuer":"(Url do login cidadão)",
   "authorization_endpoint":"(Endpoint de autorização)",
   "token_endpoint":"(Endpoint do token)",
   "token_endpoint_auth_methods_supported": "(métodos de autenticação)",
   "token_endpoint_auth_signing_alg_values_supported": "(algoritmos de autenticação)",
   "id_token_signing_alg_values_supported": "(algoritmos de autenticação)",
   "userinfo_endpoint":"(Endpoint de informações do usuário)",
   "check_session_iframe":"(Endpoint de check da sessão)",
   "end_session_endpoint":"(Endpoint de fim da sessão)",
   "jwks_uri":"(Endpoint para validação das chaves JWT)",
   "registration_endpoint":"(Endpoint de registro)",
   "scopes_supported": "(Escopos suportados)",
   "response_types_supported": "(Tipos de response_type)",
   "subject_types_supported": "(Tipos de subject)"
}​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

Passo 3

Implementar uma requisição GET de autorização https://{​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​URL}​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​/openid/connect/authorize passando as seguintes informações:

CampoDescrição
response_type Especifica para o provedor o tipo de autorização. Neste caso será code
client_id Chave de acesso que identifica o serviço consumidor
scope Especifica os recursos que o serviço consumidor quer obter. Insira vários escopo utilizando espaço, por exemplo: openid email name
redirect_uri URI de retorno cadastrada para a aplicação cliente (em URL callbacks) no formato URL Encode. Este parâmetro não pode conter caracteres especiais
nonce Sequência de caracteres usado para associar uma sessão do serviço consumidor a um Token de ID e para atenuar os ataques de repetição. Pode ser um valor aleatório, mas que não seja de fácil dedução. Item obrigatório.
state Valor usado para manter o estado entre a solicitação e o retorno de chamada. Item obrigatório.

Neste passo ocorre a etapa de autenticação do usuário, será feito um redirecionamento para a tela de login do GovBr. 

Observação: Tanto o ambiente de homologação quanto o de produção do Login Cidadão Gov.Br utilizam usuário e senha produção do GovBr. Em homologação, o responsável pelo serviço pode confirgurá-lo para usar o ambiente de testes do Gov.br(stanging). ***

Passo 4

Após a autorização, a requisição é retornada para a URL especificada no redirect_uri, por exemplo, https://{​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​SEUDOMINIO}​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​/openid/callback retornando os seguintes parâmetros:

CampoDescrição
code Código de autenticação gerado pelo provedor. Será utilizado para obtenção do Token de Resposta. Possui tempo de expiração e só pode ser utilizado uma única vez
state State passado anteriormente no https://{​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​URL}​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​/openid/connect/authorize que pode ser utilizado para controle da aplicação cliente. O cliente consegue saber se o code veio de um state gerado por ele.

Esta URL de callback pode implementar, por exemplo, o Passo 6.

Importante: Esta URL deve ter sido cadastrada como url de redirecionamento no serviço.

Passo 5

Após autenticado, no fluxo de autenticação o provedor redireciona o usuário para a página de autorização. O usuário dará permissão aos escopos solicitados neste serviço conforme imagem abaixo. 

fix wiki autorizacao

Importante: Caso o usuário nessa etapa desmarque algum dos escopos pode ocorrer problema com o uso do serviço e o usuário entrar no Painel do rs.gov.br em "Meu Perfil", vá em "Todos os Serviço", clique no serviço em "Detalhes do Serviço" e em "Desativar Serviço" e depois acesse novamente o serviço para reautorizar.

Uma vez autorizado o próximo passo é requisitar um token de acesso.

Passo 6

Implementar a requisição do token através de um POST para https://{​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​URL}​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​/openid/connect/token passando as seguintes informações:

Parâmetros do Header

CampoDescrição
Content-Type Tipo do conteúdo da requisição que está sendo enviada. Nesse caso application/x-www-form-urlencoded

Parâmetros do Body

CampoDescrição
grant_type Especifica para o provedor o tipo de autorização. Neste caso será authorization_code
code Código retornado pela requisição anterior
redirect_uri URI de retorno cadastrada para a aplicação cliente no formato URL Encode. Este parâmetro não pode conter caracteres especiais
client_id Chave de acesso que identifica o serviço consumidor
client_secret Chave segredo que equivale a senha do serviço consumidor

O serviço retornará, em caso de sucesso, no formato JSON, as informações conforme exemplo:

{​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

"access_token": "(Token de acesso cujo padrão é do tipo Bearer)",

"expires_in": "(Tempo de vida do token em segundos.)",

"token_type": "(O tipo do token gerado. Padrão: Bearer)",

"scope": "(Escopos)",

"id_token": "(Token de autenticação com informações básicas do usuário.)",

"session_state": "(Estado para controle da sessão)",

}​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

Passo 7

De posse das informações do json anterior, a aplicação consumidora está habilitada para consultar dados de recursos protegidos, que são as informações e método de acesso do usuário.

No entanto antes de utilizar os tokens do JSON anterior é necessário validar se as informações foram geradas pelos serviços do Login Cidadão Gov.Br.
Esta validação ocorrerá por meio da consulta da chave pública disponível no serviço https://{​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​URL}​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​/openid/connect/jwks com algum método para verificar as chaves e a assinatura JWT.

Outra forma de validação pode ser através do id_token. Ao extrair o JSON codificado do ID_TOKEN ele conterá as seguintes informações para validação:

{​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​
 iss: "(URL do provedor de autenticação que emitiu o token)",
 sub: "(Subject Identifier)",
 aud: "(Client ID da aplicação onde o usuário se autenticou)",
 iat: "(Data/hora em que o token foi emitido)",
 exp: "(Data/hora de expiração do token)",
 auth_time: "(Data/hora da autenticação)",
 nonce: "(Sequência de caracteres usado para associar uma sessão)",
 kid: "pub"
}​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

Passo 8

Para solicitação de informações do cadastro do cidadão, faça uma requisição GET para https:/{​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​URL}​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​/api/v2/person e acrescente o atributo Authorization ao header do HTTP da requisição:

Parâmetros do Header

CampoDescriçãoExemplo
Authorization palavra Bearer e o ACCESS_TOKEN Bearer oSeuAccesst0ken

O retorno será em formato JSON com todas as informações do usuário.

Exemplo de implementação

Para uso interno PROCERGS temos alguns implementações de exemplo disponíveis:

Passo 9 - Logout

Para encerrar a sessão com o usuário (logout) faça uma requisição GET para https://{​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​URL}​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​/openid/connect/session/end passando o seguinte parâmetro:

Parâmetro Query

CampoDescriçãoExemplo
post_logout_redirect_uri URL da aplicação para ser redirecionada após logout https://minhaapp/logout

Importante: Esta URL deve ter sido cadastrada como url de post_logout_redirect_uri no serviço para que o redirecionamento ocorra adequadamente.

Primeiro Acesso


Para o usuário autenticar basta utilizar o login e senha do GovBr.

fix 1oAcesso
 

Na primeira vez que o usuário acessa será apresentada a tela de consentimento, solicitando a permissão de uso dos seus dados no serviço do Login Cidadão Gov.br:

fix autorizacaoItems

Basta o usuário confirmar e o acesso.

Lembrando: depois que o Login Cidadão Gov.br começou a utilizar os escopos do Gov.Br (dentre os escopos especiais), essa tela poderá ser reapresentada aos usuários para solicitação de consentimento quando houver qualquer alteração nos escopos.

Primeiro acesso feito pelo serviço

Agora, quando o usuário faz um primeiro acesso a um serviço nosso (isto é, serviço está vinculado ao Login Cidadão Gov.br), uma tela solicitando a autorização de uso dos dados é exibida:

autorizacao rsgov
Conforme a autorização anterior, o usuário autoriza e o sistema tem acesso as informações dos escopos do Gov.Br.

Atenção: Caso tenha a coincidência de ser o primeiro acesso nos dois casos, ocorre a primeira e depois ocorre a segunda autorização, em sequencia.

Conteúdos relacionados

RS.GOV.BR - Portal de Serviços Digitais