Écrire un SPNEGO Authenticator pour Microsoft Edge sur Android
Des tiers peuvent activer l’authentification SPNEGO dans Microsoft Edge pour Android. Pour fournir cette authentification, ils doivent fournir un SPNEGO Authenticator. Cet article décrit l’interface entre Edge et SPNEGO Authenticator.
Introduction
L’authentificateur SPNEGO est fourni par un service Android. L’authentificateur doit être incorporé dans une application, fournie par le tiers, installée sur l’appareil de l’utilisateur. L’application est responsable de la gestion des comptes utilisés pour l’authentification SPNEGO et de toutes les communications avec le serveur SPNEGO.
SpNEGO Authenticator est un compte AndroidAuthenticator. Par conséquent, il doit suivre le modèle décrit dans AbstractAccountAuthenticator. Il doit implémenter une classe d’authentificateur dérivée de AbstractAccountAuthenticator
.
SpNEGO Authenticator doit définir un nouveau type de compte. Le nom du type de compte doit être dérivé du nom de domaine de l’enregistreur (par exemple, com.example.spnego). Le type de compte doit être défini pour utiliser customTokens et prendre en charge la fonctionnalité « SPNEGO » (HttpNegotiateConstants.SPNEGO_FEATURE).
Interface avec Microsoft Edge
Edge recherche l’authentificateur SPNEGO via le type de compte Android qu’il fournit. Le type de compte défini par l’authentificateur est passé à Edge via la stratégie AuthAndroidNegotiateAccountType .
L’interface vers Edge se fait via l’infrastructure de gestion des comptes Android, par le biais de AbstractAccountManager.getAuthToken en particulier. Edge, dans org.chromium.net.HttpNegotiateConstants définit d’autres clés et valeurs utilisées dans les arguments pour getAuthToken
, et dans le bundle de résultats retourné.
Arguments getAuthToken
Lorsque getAuthToken est appelé, est authTokenType
« SPNEGO :HOSTBASED :<spn> », où <spn> est le principal de la requête. Il s’agit toujours d’un principal basé sur l’hôte dans l’implémentation actuelle. Les versions ultérieures peuvent autoriser d’autres types de principaux, mais si elles le font, elles utilisent un préfixe différent. SpNEGO Authenticators doit vérifier le préfixe.
L’offre options
groupée contient les clés suivantes :
- KEY_CALLER_PID
- KEY_CALLER_UID
HttpNegotiateConstants.KEY_CAN_DELEGATE
- True si la délégation est autorisée, false si elle n’est pas autorisée.
S’il s’agit de la deuxième série ou d’une séquence d’authentification à plusieurs tours, elle contient également les clés suivantes.
HttpNegotiateConstants.KEY_INCOMING_AUTH_TOKEN
- Jeton entrant de l’en-tête WWW-Authenticate, encodé en Base64.HttpNegotiateConstants.KEY_SPNEGO_CONTEXT
- Contexte SPNEGO fourni par l’authentificateur lors de la ronde précédente. Microsoft Edge traite ce bundle comme un objet opaque et le conserve simplement entre les cycles.
Ensemble de résultats getAuthToken
Le bundle de résultats final de getAuthToken (retourné en tant que valeur de retour de , ou par le biais de getAuthToken
AccountAuthenticatorResponse) doit contenir le nom du compte, le type de compte et le jeton définis dans la documentation Android. En outre, le bundle doit contenir les clés suivantes :
HttpNegotiateConstants.KEY_SPNEGO_RESULT
: code de résultat SPNEGO. Il doit s’agir de l’une des valeurs définies dans HttpNegotiateConstants.HttpNegotiateConstants.KEY_SPNEGO_CONTEXT
- un contexte à retourner à l’authentificateur lors de la prochaine ronde d’authentification. Cela n’est nécessaire que si l’authentification est incomplète.
Recommandations d’implémentation
Les recommandations suivantes doivent être prises en compte lors de l’implémentation d’un authentificateur SPNEGO.
Chaque compte fourni par un authentificateur de compte SPNEGO doit correspondre à un seul principal d’utilisateur (compte) fourni par un centre de distribution de clé unique.
L’authentificateur de compte ne doit pas stocker de mots de passe. Au lieu de cela, il doit stocker des TGT pour les principaux d’utilisateur et demander aux utilisateurs d’entrer de nouveau leurs mots de passe (ou d’autres données d’authentification) à l’expiration de leur TGT.
L’authentificateur de compte doit conserver une liste des applications autorisées (ou signatures d’application) pour chaque compte et refuser de fournir des jetons de service à d’autres applications. La liste des applications autorisées peut être :
- Intégré à l’authentificateur de compte.
- Configurable par l’administrateur système.
- Configurable par l’utilisateur. Dans ce cas, l’authentificateur de compte peut choisir d’autoriser l’utilisateur à autoriser dynamiquement les nouvelles applications lorsqu’il demande l’accès pour la première fois.
L’authentificateur peut obtenir l’uid de l’application appelante à l’aide du champ KEY_CALLER_UID de l’offre groupée d’options, puis identifier l’application demandeur à l’aide
context.getPackageManager().getNameForUid()
d’un appel similaire ou similaire.Cela est nécessaire pour garantir que les applications malveillantes exécutées par l’utilisateur ne peuvent pas utiliser les informations d’identification de l’utilisateur pour accéder aux services de manière involontaire. Ceci est important, car l’utilisation de l’option jetons personnalisés (comme décrit précédemment) désactive la vérification de signature d’Android lors de l’obtention de jetons d’authentification.
À moins qu’il ne soit intégré à l’authentificateur de compte, l’administrateur système ou l’utilisateur doit être en mesure de configurer l’emplacement du centre de distribution de clés.
Codes d’erreur affichés dans Microsoft Edge
En plus des codes d’erreur qui peuvent être transférés à partir de l’application d’authentification, les erreurs suivantes peuvent être affichées lors de la tentative d’authentification d’une demande :
- ERR_MISSING_AUTH_CREDENTIALS : les informations de compte ne sont pas utilisables. Il peut être déclenché pour l’une des raisons suivantes.
- L’utilisateur ne s’est pas connecté à l’application d’authentification et aucun compte éligible n’est trouvé.
- Les informations de compte ne peuvent pas être obtenues, car l’application actuelle ne dispose pas des autorisations requises.
- Il existe plusieurs comptes éligibles et nous ne pouvons pas obtenir de sélection de la part de l’utilisateur.
- ERR_UNEXPECTED : une erreur inattendue s’est produite et la demande a été arrêtée.
- ERR_MISCONFIGURED_AUTH_ENVIRONMENT : l’authentification ne peut pas être effectuée en raison de certains problèmes de configuration de l’application. Certaines autorisations peuvent être manquantes.
Utilisez Logcat pour rechercher la balise cr_net_auth dans le journal système afin d’obtenir plus d’informations sur la cause de ces erreurs.
Utiliser l’authentificateur avec Microsoft Edge
Edge utilise plusieurs stratégies pour contrôler l’utilisation de l’authentification SPNEGO. Pour activer l’authentification SPNEGO, AuthServerAllowList doit être configuré et AuthAndroidNegotiateAccountType doit correspondre au type de compte fourni par l’authentificateur SPNEGO.
Licence de contenu
Remarque
Certaines parties de cette page sont des modifications basées sur le travail créé et partagé par Chromium.org et utilisé conformément aux conditions décrites dans la Licence internationale Creative Commons Attribution 4.0. La page d’origine est disponible ici.
Ce travail est concédé sous une Licence internationale Creative Commons Attribution 4.0.