Compartilhar via


Escrever um Autenticador SPNEGO para o Microsoft Edge no Android

Terceiros podem ativar a autenticação SPNEGO no Microsoft Edge para Android. Para fornecer esta autenticação, têm de fornecer um Autenticador SPNEGO. Este artigo descreve a interface entre o Edge e o Autenticador SPNEGO.

Introdução

O Autenticador SPNEGO é fornecido por um Serviço Android. O autenticador tem de ser incorporado numa aplicação, fornecida por terceiros, instalada no dispositivo do utilizador. A aplicação é responsável por gerir todas as contas utilizadas para a autenticação SPNEGO e por toda a comunicação com o servidor SPNEGO.

O Autenticador SPNEGO é uma Conta AndroidAuthenticator. Como tal, tem de seguir o padrão descrito em AbstractAccountAuthenticator. Tem de implementar uma classe de autenticador derivada de AbstractAccountAuthenticator.

O Autenticador SPNEGO tem de definir um novo tipo de conta. O nome do tipo de conta deve ser derivado do nome de domínio do escritor (por exemplo, com.example.spnego). O tipo de conta tem de ser definido para utilizar customTokens e tem de suportar a funcionalidade "SPNEGO" (HttpNegotiateConstants.SPNEGO_FEATURE).

Interface para o Microsoft Edge

O Edge localiza o autenticador SPNEGO através do tipo de conta Android que fornece. O tipo de conta definido pelo autenticador é transmitido para o Edge através da política AuthAndroidNegotiateAccountType .

A interface para o Edge é através da arquitetura de gestão de contas Android, através de AbstractAccountManager.getAuthToken em particular. Edge, em org.chromium.net.HttpNegotiateConstants define mais algumas chaves e valores que são utilizados nos argumentos para getAuthTokene no pacote de resultados devolvido.

argumentos getAuthToken

Quando getAuthToken é chamado, authTokenType é "SPNEGO:HOSTBASED:<spn>" em <que spn> é o principal do pedido. Este será sempre um principal baseado no anfitrião na implementação atual. As versões futuras podem permitir outros tipos de principais, mas se o fizerem, utilizam um prefixo diferente. Os Autenticadores SPNEGO devem verificar o prefixo.

O options pacote contém estas chaves:

  • KEY_CALLER_PID
  • KEY_CALLER_UID
  • HttpNegotiateConstants.KEY_CAN_DELEGATE - Verdadeiro se a delegação for permitida, falso se não for permitido.

Se esta for a segunda ou mais recente ronda de uma sequência de autenticação de várias voltas, também contém as seguintes chaves.

  • HttpNegotiateConstants.KEY_INCOMING_AUTH_TOKEN - O token de entrada do cabeçalho WWW-Authenticate, codificado em Base64.
  • HttpNegotiateConstants.KEY_SPNEGO_CONTEXT - O contexto SPNEGO fornecido pelo autenticador na ronda anterior. O Microsoft Edge trata este pacote como um objeto opaco e simplesmente preserva-o entre rondas.

pacote de resultados getAuthToken

O pacote de resultados final de getAuthToken (devolvido como o valor devolvido de ou através de getAuthTokenAccountAuthenticatorResponse) deve conter o nome da conta, o tipo de conta e o token, conforme definido na documentação do Android. Além disso, o pacote deve conter estas chaves:

  • HttpNegotiateConstants.KEY_SPNEGO_RESULT - o código de resultado SPNEGO. Este deve ser um dos valores definidos em HttpNegotiateConstants.
  • HttpNegotiateConstants.KEY_SPNEGO_CONTEXT - um contexto a ser devolvido ao autenticador na próxima ronda de autenticação. Isto só é necessário se a autenticação estiver incompleta.

Recomendações de implementação

As seguintes recomendações devem ser consideradas ao implementar um autenticador SPNEGO.

  • Cada conta fornecida por um Autenticador de Conta SPNEGO deve corresponder a um único principal de utilizador (conta) fornecido por um único centro de distribuição de chaves.

  • O autenticador de conta não deve armazenar palavras-passe. Em vez disso, deve armazenar TGTs para os principais de utilizador e exigir que os utilizadores introduzam novamente as respetivas palavras-passe (ou outros dados de autenticação) quando o TGT expirar.

  • O autenticador de conta deve manter uma lista de aplicações autorizadas (ou assinaturas de aplicações) para cada conta e recusar-se a fornecer tokens de serviço a outras aplicações. A lista de aplicações autorizadas pode ser:

    • Incorporado no autenticador de conta.
    • Configurável pelo administrador de sistema.
    • Configurável pelo utilizador. Neste caso, o autenticador de conta pode optar por permitir que o utilizador autorize as novas aplicações dinamicamente quando pedir acesso pela primeira vez.

    O autenticador pode obter o uid da aplicação de chamada através do campo KEY_CALLER_UID do pacote de opções e, em seguida, identificar a aplicação que pede com context.getPackageManager().getNameForUid() ou chamada semelhante.

    Isto é necessário para garantir que as aplicações maliciosas executadas pelo utilizador não podem utilizar as credenciais do utilizador para aceder aos serviços de formas não intencionais. Isto é importante porque a utilização da opção de tokens personalizados (conforme descrito anteriormente) desativa a verificação de assinatura do Android ao obter tokens de autenticação.

  • A menos que esteja incorporado no autenticador de conta, o administrador ou utilizador do sistema tem de conseguir configurar a localização do centro de distribuição de chaves.

Códigos de erro apresentados no Microsoft Edge

Além dos códigos de erro que podem ser reencaminhados a partir da aplicação de autenticação, podem ser apresentados os seguintes erros ao tentar autenticar um pedido:

  • ERR_MISSING_AUTH_CREDENTIALS: as informações da conta não são utilizáveis. Pode ser levantada por qualquer uma das seguintes razões.
    • O utilizador não inessão na aplicação de autenticação e não foi encontrada nenhuma conta elegível.
    • Não é possível obter as informações da conta porque a aplicação atual não tem as permissões necessárias.
    • Existe mais do que uma conta elegível e não é possível obter uma seleção do utilizador.
  • ERR_UNEXPECTED: ocorreu um erro inesperado e o pedido foi terminado.
  • ERR_MISCONFIGURED_AUTH_ENVIRONMENT: a autenticação não pode ser concluída devido a alguns problemas na configuração da aplicação. Algumas permissões podem estar em falta.

Utilize Logcat para procurar a etiqueta cr_net_auth no registo do sistema para obter mais informações sobre a causa destes erros.

Utilizar o autenticador com o Microsoft Edge

O Edge utiliza várias políticas para controlar a utilização da autenticação SPNEGO. Para ativar a autenticação SPNEGO, o AuthServerAllowList tem de ser configurado e o AuthAndroidNegotiateAccountType tem de corresponder ao tipo de conta fornecido pelo autenticador SPNEGO.

Licença de conteúdo

Observação

Partes desta página são modificações baseadas no trabalho criado e compartilhado pela Chromium.org e usadas de acordo com os termos descritos na Licença Pública Creative Commons Atribuição 4.0 Internacional. A página original pode ser encontrada aqui.

Licença Creative Commons
Esse trabalho é licenciado sob uma Licença Attribution 4.0 International da Creative Commons.

Consulte também