Utilisation d'une URL d'erreur pour la gestion personnalisée des erreurs
Mise à jour : 19 juin 2015
S’applique à : Azure
S'applique à
- Microsoft Azure Active Directory Access Control (également appelé Access Control Service ou ACS)
Résumé
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 vous permet d’envoyer des erreurs générées par ACS à l’application de partie de confiance afin que l’application puisse enregistrer et répondre aux erreurs. 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.
Contenu
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 – Tester votre travail
Objectifs
Identifier la configuration requise pour l'utilisation de la fonctionnalité d'URL d'erreur.
Identifiez le code d’assistance requis pour traiter les messages d’erreur à partir d’ACS.
Identifier et résoudre les pièges potentiels.
Vue d’ensemble
Une URL d’erreur spécifie l’adresse web vers laquelle ACS redirige les 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 retourne des informations sur l’erreur à l’application de partie de confiance en tant que 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."}]}
Résumé des étapes
Utilisez le processus suivant pour gérer les messages d’erreur ACS :
É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 – Tester votre travail
Étape 1 : activation de la fonctionnalité d'URL d'erreur
Pour activer la fonctionnalité d'URL d'erreur pour votre partie de confiance
Accédez au portail de gestion Microsoft Azure (https://manage.WindowsAzure.com), connectez-vous, puis cliquez sur Active Directory. (Conseil de résolution des problèmes : l’élément « Active Directory » est manquant ou non disponible)
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.)
Cliquez sur Applications par partie de confiance, puis sélectionnez l'application par partie de confiance.
Dans la page Modifier l'application par partie de confiance, entrez l'URL de votre page d'erreur dans le champ URL d'erreur.
ACS redirige l’utilisateur vers cette page lorsque des erreurs de connexion se produisent. En outre, ACS envoie des paramètres codés d’URL JSON à cette page qui incluent les détails de l’erreur.
Étape 2 : création des classes d'assistance en cas d'erreur
Cette étape crée des classes d'assistance en cas d'erreur, qui désérialisent les messages d'erreur encodés JSON.
Pour créer des classes d'assistance en cas d'erreur
Ajoutez un fichier de classe à votre application web, et attribuez-lui un nom, par exemple, Erreur.cs.
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 donnez-lui un nom, tel que ErrorDetails.cs.
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 à partir d’ACS.
Étape 3 : traitement d'un message d'erreur encodé JSON
Cette étape montre comment traiter les messages d’erreur codés JSON générés par ACS.
Pour traiter un message d'erreur encodé JSON généré par ACS
Ajoutez une page web ASPX à votre application ASP.NET, et attribuez-lui un nom, par exemple, PageErreur.cs.
Ajoutez les étiquettes suivantes aux balises ASP.NET.
<asp:Label ID="lblIdntityProvider" runat="server"></asp:Label> <asp:Label ID="lblErrorMessage" runat="server"></asp:Label>
Basculez vers le fichier code-behind de la page, PageErreur.aspx.cs.
Ajoutez la déclaration suivante en haut.
using System.Web.Script.Serialization;
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 codés JSON à partir d’ACS.
Étape 4 : configuration d'un accès anonyme à la page d'erreur
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 lorsque ACS tente d’accéder à la page, ACS envoie une erreur encodée JSON.
Notes
É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 :
-
Guide pratique pour empêcher le script intersites dans ASP.NET (https://go.microsoft.com/fwlink/?LinkID=178708).
-
Guide pratique pour protéger contre les attaques par injection dans ASP.NET (https://go.microsoft.com/fwlink/?LinkID=157572).
-
Guide pratique pour protéger contre l’injection de SQL dans ASP.NEThttps://go.microsoft.com/fwlink/?LinkID=212978.
Pour configurer un accès anonyme à la page d'erreur
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.
Étape 5 – Tester votre travail
Cette étape teste la configuration et l'implémentation de votre URL d'erreur.
Pour activer la fonctionnalité d'URL d'erreur pour votre partie de confiance
Accédez au portail de gestion Microsoft Azure (https://manage.WindowsAzure.com), connectez-vous, puis cliquez sur Active Directory. (Conseil de résolution des problèmes : l’élément « Active Directory » est manquant ou non disponible)
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.)
Cliquez sur groupes de règles, puis sur un groupe de règles associé à l'application par partie de confiance.
-
Avertissement
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.
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.
Cliquez sur Enregistrer.
Revenez à votre site web, et accédez à l'une des pages à l'aide de votre navigateur.
Vous devez être redirigé vers votre fournisseur d’identité pour l’authentification : Windows l’ID en direct (compte Microsoft), Google, Facebook, Yahoo!, ou — ce qui est configuré pour votre partie de confiance en tant que fournisseur d’identité.
Une fois l’authentification réussie, vous devez être redirigé vers ACS, ce qui doit générer une erreur, car aucune règle n’est définie.
Cette erreur doit s’afficher sur votre page d’erreur que vous avez créée à l’étape 2 : créez des classes d’assistance aux erreurs, et sera similaire à ce qui suit :
uri:WindowsLiveID Error Code ACS50000 : une erreur a émis un 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.