Autenticação SAML no ChromeOS

Por padrão, o serviço de contas acessível externamente do Google processa a autenticação das contas do Google. Quando um usuário não autenticado visita uma página do Google que exige autenticação, o formulário de login do Google pede o endereço de e-mail e a senha do usuário. Depois que o usuário envia o e-mail e a senha, a autenticação do Google verifica se as credenciais inseridas estão corretas. Se as credenciais estiverem corretas, a autenticação do Google definirá os cookies de login do usuário.

Algumas empresas usam um modelo mais sofisticado em que um provedor de identidade (IdP) de terceiros processa a autenticação. A autenticação do Google oferece suporte a esse modelo usando o protocolo Linguagem de marcação para autorização de segurança (SAML), padrão do setor. Um administrador pode configurar um domínio para usar a autenticação SAML.

Como conseguir a senha do usuário

O ChromeOS precisa identificar a senha inserida pelo usuário durante o login para:

  • Criptografar os dados do usuário armazenados na unidade de disco.
  • Proteja a tela de bloqueio.
  • Ativar o login off-line quando não houver acessibilidade de rede.

Ao usar o SAML, a senha não é inserida diretamente em uma caixa de diálogo do sistema ChromeOS, mas em uma WebView hospedada pelo provedor de identidade. Embora o ChromeOS tenha acesso ao HTML, não há uma maneira simples e canônica de acessar a senha, já que não está claro quais campos de formulário contêm os dados.

Há duas maneiras de conseguir a senha de um usuário ao usar o SAML: a API de transmissão de credenciais e a raspagem de senhas.

API Chrome Credentials Passing

O Google oferece uma API de transmissão de credenciais que os provedores de identidade podem implementar em páginas SAML, em JavaScript, para transmitir os dados necessários ao ChromeOS. A autenticação do Google usa essa API, mas qualquer provedor de identidade SAML também pode usá-la.

Raspagem de senhas

Um provedor de identidade SAML pode usar a raspagem de senhas quando não oferece suporte à API Credentials Passing.

Neste método:

  1. A tela de autenticação injeta um script de conteúdo na WebView que hospeda o processo de login.
  2. O script de conteúdo identifica campos de entrada HTML do tipo senha e copia o conteúdo deles para uma matriz. A matriz é atualizada sempre que o conteúdo de um campo de senha muda.
  3. As senhas extraídas são enviadas para uma página em segundo plano que as acumula. Assim, a senha pode ser capturada mesmo que o fluxo de login abranja vários redirecionamentos para páginas HTML diferentes.

No final do fluxo de login, a matriz de senhas extraídas é recuperada da página em segundo plano. Três casos são possíveis: nenhuma senha foi extraída, exatamente uma senha foi extraída ou mais de uma senha foi extraída.

Nenhuma senha foi extraída

O script de conteúdo não consegue localizar a senha nas páginas HTML veiculadas pelo provedor de identidade. O provedor de identidade não pode usar senhas tradicionais.

Nesse cenário, o ChromeOS vai pedir que o usuário escolha uma senha manual para o dispositivo. Se a senha não existir (por exemplo, autenticação por cartões inteligentes, NFC, biometria), o processo de autenticação do ChromeOS poderá continuar sem a senha.

Exatamente uma senha foi extraída

O script de conteúdo identifica exatamente uma senha. Provavelmente, essa é a senha do usuário usada para autenticação.

Nesse cenário, provavelmente extraímos a senha do usuário corretamente. O ChromeOS vai usar a senha extraída como a senha do usuário para continuar o processo de autenticação.

Mais de uma senha foi extraída

O script de conteúdo identifica várias senhas. Isso pode acontecer em circunstâncias como um provedor de identidade que exige que um usuário insira uma senha permanente e uma senha única no formulário de login.

Nesse cenário, provavelmente extraímos a senha real do usuário e alguns campos de senha adicionais que não são de interesse do ChromeOS. Para determinar qual é a senha correta, o ChromeOS vai pedir que o usuário insira a senha mais uma vez em uma solicitação adicional.

Se a senha inserida corresponder a uma das senhas extraídas, a senha real do usuário terá sido identificada, e o processo de autenticação vai continuar. Se não houver correspondência, o usuário precisará digitar a senha novamente. Após duas incompatibilidades, o login falha com uma mensagem de erro.

Registro empresarial

Para a inscrição empresarial, o endereço de e-mail do usuário é necessário para associar o dispositivo ao domínio correto. O e-mail é enviado do servidor de gerenciamento de dispositivos (DM, na sigla em inglês) para o Chrome no campo "username" da mensagem PolicyData durante a busca da política do dispositivo. Não é necessário determinar a senha do usuário.