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 getAuthToken
e 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 marcar 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 getAuthToken
AccountAuthenticatorResponse) 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 própria assinatura do Android marcar 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.
Esse trabalho é licenciado sob uma Licença Attribution 4.0 International da Creative Commons.