Cette documentation est archivée et n’est pas conservée.

Utilisation d'une URL d'erreur pour la gestion personnalisée des erreurs

Publication: avril 2011

Mis à jour: juin 2015

S'applique à: Azure

  • Microsoft Azure Active Directory Access Control (également appelé Access Control Service ou ACS)

Cette rubrique explique comment utiliser la fonctionnalité d'URL d'erreur pour implémenter une gestion des erreurs de connexion personnalisée dans une application par partie de confiance. Une URL d'erreur permet de renvoyer des erreurs générées par ACS à l'application par partie de confiance afin que celle-ci puisse journaliser les erreurs et y répondre. Par exemple, des sites web ASP.NET peuvent utiliser la fonctionnalité d'URL d'erreur pour présenter aux utilisateurs finaux des messages d'erreur dont l'apparence est similaire à celle du site web.

  • Objectifs

  • Vue d'ensemble

  • Résumé des étapes

  • Étape 1 : activation de la fonctionnalité d'URL d'erreur

  • Étape 2 : création des classes d'assistance en cas d'erreur

  • Étape 3 : traitement d'un message d'erreur encodé JSON

  • Étape 4 : configuration d'un accès anonyme à la page d'erreur

  • Étape 5 : test de votre travail

  • Identifier la configuration requise pour l'utilisation de la fonctionnalité d'URL d'erreur.

  • Identifier le code d'assistance nécessaire pour traiter les messages d'erreur d'ACS.

  • Identifier et résoudre les pièges potentiels.

Une URL d'erreur spécifie l'adresse web vers laquelle ACS redirige des utilisateurs si une erreur se produit pendant le processus de connexion. L'URL d'erreur cible est généralement une page d'erreur personnalisée, hébergée par l'application par partie de confiance. Dans le cadre de la redirection, ACS renvoie des informations sur l'erreur à l'application par partie de confiance sous la forme d'un paramètre d'URL HTTP encodé JSON. Vous pouvez inclure les informations d'erreur encodées JSON dans la page d'erreur personnalisée, ou afficher un texte d'aide statique. Voici un exemple de message d'erreur encodée JSON.

{"context":null,"httpReturnCode":401,"identityProvider":"Google","timeStamp":"2010-12-17 21:01:36Z","traceId":"16bba464-03b9-48c6-a248-9d16747b1515","errors":[{"errorCode":"ACS30000","errorMessage":"There was an error processing an OpenID sign-in response."},{"errorCode":"ACS50019","errorMessage":"Sign-in was canceled by the user."}]}

Pour gérer les messages d'erreur ACS, procédez comme suit :

  • Étape 1 : activation de la fonctionnalité d'URL d'erreur

  • Étape 2 : création des classes d'assistance en cas d'erreur

  • Étape 3 : traitement d'un message d'erreur encodé JSON

  • Étape 4 : configuration d'un accès anonyme à la page d'erreur

  • Étape 5 : test de votre travail

  1. Accédez au Portail de gestion Microsoft Azure (https://manage.WindowsAzure.com), ouvrez une session, puis cliquez sur Active Directory. (Conseil de dépannage : « Active Directory » est manquant ou non disponible)

  2. Pour gérer un espace de noms Access Control, sélectionnez l'espace de noms, puis cliquez sur Gérer. (Ou cliquez sur Espaces de noms Access Control, sélectionnez l'espace de noms, puis cliquez sur Gérer.)

  3. Cliquez sur Applications par partie de confiance, puis sélectionnez l'application par partie de confiance.

  4. Dans la page Modifier l'application par partie de confiance, entrez l'URL de votre page d'erreur dans le champ URL d'erreur.

    En cas d'erreur de connexion, ACS redirige l'utilisateur vers cette page. De plus, ACS envoie à cette page des paramètres encodés en URL JSON, qui incluent les détails de l'erreur.

Cette étape crée des classes d'assistance en cas d'erreur, qui désérialisent les messages d'erreur encodés JSON.

  1. Ajoutez un fichier de classe à votre application web, et attribuez-lui un nom, par exemple, Erreur.cs.

  2. Implémentez la classe Erreur comme suit.

    public class Error
    {
        public string errorCode { get; set; }
        public string errorMessage { get; set; }
    }
    
    

    Ajoutez un autre fichier de classe, et attribuez-lui un nom, par exemple, DétailsErreur.cs.

  3. Implémentez la classe DétailsErreur comme suit.

    public class ErrorDetails
    {
        public string context { get; set; }
        public int httpReturnCode { get; set; }
        public string identityProvider { get; set; }
        public Error[] errors { get; set; }
    }
    

Ces classes seront utilisées à l'étape suivante lors du traitement des messages d'erreur d'ACS.

Cette étape montre comment traiter les messages d'erreur encodés JSON générés par ACS.

  1. Ajoutez une page web ASPX à votre application ASP.NET, et attribuez-lui un nom, par exemple, PageErreur.cs.

  2. Ajoutez les étiquettes suivantes aux balises ASP.NET.

    <asp:Label ID="lblIdntityProvider" runat="server"></asp:Label> 
    <asp:Label ID="lblErrorMessage" runat="server"></asp:Label> 
    
    
  3. Basculez vers le fichier code-behind de la page, PageErreur.aspx.cs.

  4. Ajoutez la déclaration suivante en haut.

    using System.Web.Script.Serialization;
    
    
  5. Ajoutez le code suivant à la méthode Page_Load.

    JavaScriptSerializer serializer = new JavaScriptSerializer(); ErrorDetails error = serializer.Deserialize<ErrorDetails>( 
    
    
                                         Request["ErrorDetails"] ); lblErrorMessage.Text = string.Join("<br/>", 
                                        error.errors.Select(er => string.Format("Error Code {0}: {1}", 
                                        er.errorCode, er.errorMessage)).ToArray());
    
    
    
    

    Ce code traite les messages d'erreur encodés JSON d'ACS.

Cette étape configure un accès anonyme au fichier PageErreur.aspx. Si la page est protégée et nécessite une autorisation, cela génère une boucle infinie de redirection. Si cela se produit quand ACS essaie d'accéder à la page, ACS envoie une erreur encodée JSON.

noteRemarque
Étant donné que la page d'erreur est accessible de manière anonyme et peut inclure du code qui renvoie du HTML ou qui écrit des données dans votre base de données, vous devez veiller à éviter les scripts de site à site et les attaques par injection de code SQL. Les ressources suivantes décrivent cela plus en détail :

  • Ouvrez le fichier web.config de votre application, puis ajoutez l'entrée suivante.

    <location path="ErrorPage.aspx">
      <system.web>
        <authorization>
          <allow users="*" />
        </authorization>
      </system.web>
    </location>
    

    Cela garantit que l'accès à votre page n'entraîne pas de boucle infinie de redirection.

Cette étape teste la configuration et l'implémentation de votre URL d'erreur.

  1. Accédez au Portail de gestion Microsoft Azure (https://manage.WindowsAzure.com), ouvrez une session, puis cliquez sur Active Directory. (Conseil de dépannage : « Active Directory » est manquant ou non disponible)

  2. Pour gérer un espace de noms Access Control, sélectionnez l'espace de noms, puis cliquez sur Gérer. (Ou cliquez sur Espaces de noms Access Control, sélectionnez l'espace de noms, puis cliquez sur Gérer.)

  3. Cliquez sur groupes de règles, puis sur un groupe de règles associé à l'application par partie de confiance.

  4. WarningAvertissement
    L'étape suivante ne peut pas être annulée. Toutefois, si vous supprimez des règles générées, il est facile de les régénérer.

  5. Dans la page Modifier le groupe de règles, sélectionnez toutes les règles dans la section Règles, puis cliquez sur Supprimer les règles sélectionnées.

  6. Cliquez sur Enregistrer.

  7. Revenez à votre site web, et accédez à l'une des pages à l'aide de votre navigateur.

  8. Vous devez être redirigé vers votre fournisseur d'identité pour authentification. Il peut s'agir de Windows Live ID (compte Microsoft), Google, Facebook, Yahoo!, ou , selon le fournisseur d'identité configuré pour votre partie de confiance.

  9. Après authentification, vous devez être redirigé vers ACS, qui doit générer une erreur dans la mesure où aucune règle est définie.

  10. Cette erreur doit s'afficher sur la page d'erreur que vous avez créée à l'Étape 2 : création des classes d'assistance en cas d'erreur, et ressemble à ceci :

    uri:WindowsLiveID Code d'erreur ACS50000: Une erreur s'est produite lors de l'émission du jeton.

Une autre méthode de test consiste à refuser le consentement de l'utilisateur. Celui-ci est présenté quand vous vous connectez via Facebook ou Google.

Afficher: