O que é e como funciona

Single Sign On (SSO) é um mecanismo pelo qual torna-se possível que um usuário obtenha acesso a múltiplos serviços após autenticar-se somente uma vez em qualquer um destes serviços.

SSO utilizando OAuth

O protocolo OAuth é utilizado como base para o sistema de SSO.

A utilização deste protocolo possibilita a comunicação entre os servidores da aplicação e de autenticação de forma robusta e controlável, utilizando mecanismos de controle de acesso preexistentes, utilizados nos mais diversos contextos.

Funcionamento

O funcionamento deste método se dá da seguinte forma:

  1. O usuário acessa a aplicação desejada.
  2. A aplicação checa se este usuário já possui uma sessão ativa. Caso não exista, efetua uma requisição para a URL de requisição de credenciais temporárias no sistema SSO (/sso/initiate), fornecendo sua identificação e uma URL de callback.
  3. O sistema de SSO valida as credenciais do serviço e, em caso de sucesso, responde à requisição com um conjunto de credenciais temporárias.
  4. A aplicação redireciona o usuário para a URL de autenticação no sistema SSO, adicionando à requisição a credencial temporária obtida na requisição anterior.
  5. O sistema de SSO checa se este usuário já possui uma sessão ativa. Caso não exista, exibe ao usuário uma página onde o mesmo pode se autenticar.
  6. Após a autenticação do usuário, é feita uma consulta ao Passaporte Web para checar se existe uma associação deste usuário com o serviço que solicitou sua autenticação. Em caso negativo, é exibida uma tela na qual o usuário é notificado que tal serviço solicitou acesso a seus dados. O usuário tem a opção de permitir o acesso permanentemente, permitir o acesso somente nesta sessão, ou negar o acesso a seus dados. Caso o usuário permita o acesso permanentemente, deve ser criada uma associação entre o usuário e o serviço.
  7. Caso o usuário não permita o acesso a seus dados, o processo de login é finalizado. Caso contrário o usuário é redirecionado para a URL de callback fornecida pela aplicação cliente no inicio do processo, adicionando a credencial temporária do serviço e um verificador.
  8. A aplicação extrai a credencial e o verificador e efetua uma requisição para a URL de validação de tokens no sistema SSO.
  9. O sistema de SSO valida os tokens e responde à requisição com um conjunto de credenciais que possibilitam o acesso aos dados do usuário.
  10. De posse destas informações, a aplicação cliente solicita ao sistema de SSO os dados do usuário, de forma a autenticá-lo localmente.

Este fluxo é ilustrado pelos diagramas abaixo:

Diagrama explicativo sobre o fluxo de autenticação OAuth

../_images/oauth-authentication-flow.png

Papéis dos componentes do serviço

  • O Passaporte Web se comporta como um OAuth Service Provider.
  • As aplicações clientes se comportam como OAuth Consumers. Bibliotecas que implementam tal comportamento em um grande número de linguagens podem ser encontradas em http://oauth.net/code/.

Ambientes e URI’s

Considerações para aplicações cliente

  1. A versão do protocolo OAuth utilizada atualmente é a 1.0
  2. Os métodos de assinatura de parâmetros suportados atualmente são PLAINTEXT e HMAC_SHA1
  3. O realm das requisições de acesso DEVE utilizar o valor padrão “auth:api” ou ser omitido pela aplicação cliente. Caso o valor do parâmetro seja vazio ou inválido, a requisição será negada.
  4. Caso a aplicação cliente tenha a intenção de obter acesso a outros recursos protegidos por OAuth após o processo de autenticação, deve-se fornecer a lista dos Realms referentes a estes recursos, com seus elementos separados por um espaço em branco (” ”) durante a solicitação do request token. Após o processo de autenticação, quando a aplicação cliente efetuar as requisições a um dos recursos adicionais previamente autorizados ela deve fornecer somente o Realm referente a este recurso. Para entender como informar o Realm, veja este exemplo na rfc.
  5. Como definido na RFC do protocolo OAuth, os parâmetros das requisições podem ser fornecidos por qualquer um dos métodos abaixo:

Vale observar que os parâmetros de uma requisição devem ser fornecidos por SOMENTE UM dos meios listados acima.

Logout

Para efetuar o logout na aplicação e no Passaporte Web, é recomendado o seguinte procedimento:

  1. Efetue o logout na sua aplicação

  2. Redirecione o usuário para a URL de logout do Passaporte Web, fornecendo no parâmetro next a URL de acesso à sua aplicação. Exemplo:

    https://app.passaporteweb.com.br/accounts/logout?next=http://myapp.mycompany