Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Authentification ACS: Redirection et passage de paramètres

Si vous avez déjà mis en place l’authentification avec ACS sur un de vos projet, vous avez peut-être comme moi été confronté au problème suivant: si mon utilisateur arrive sur le site et tente d’accéder à une page qui requiert d’être authentifiée et qu’il ne l’est pas encore, celui-ci est redirigé vers le service d’authentification ACS.

Jusque-là tout va bien mais une fois authentifié il est redirigé vers la page définie en tant que returnUrl dans le portail Azure. Dans mon cas mes utilisateur tentais d’accéder directement à une url avec paramètres en scannant un QR code et j’ai donc commencé à chercher une solution pour transmettre ces paramètres à mon site à travers de l’authentification ACS afin de le traiter directement au retour sur le site.

 

Après un temps de recherche, je trouve principalement des réponses préconisant l’utilisation du paramètre WCTX de la login URL des providers utilisés. Ce dernier est censé être utilisé justement pour faire transiter des informations qui seront alors retranscrises tel quel par ACS à la return URL.

Le problème est que l’on recoit le contenu de ce paramètre encrypté et qu’il est alors très compliqué d’y ajouter des informations… On oublie donc cette solution!!

 

La meilleure solution m’a en fait été soufflée par Léonard et est beaucoup plus simple et n’est pas pourtant documentée! Il est en effet possible de modififer l’URL de retour transmise par ACS en fonction de l’action demandée par l’utilisateur et ce ci très simplement:

 

Sur le portail de connexion d’Azure > Bus de service, contrôle d’accès et cache > Contrôle d’accès. Ensuite, dans la configuration de votre Applications par partie de confiance: Définir l’url de retour à la racine de votre site par défaut.

image

Toujours dans le portail de configuration du contrôle d’accès, dans la partie Intégration de l’application récupérez l’URL du JSON permettant de récupérer les urls de connexion aux différents providers.

image

Nous allons l’intégrer en tant que paramètre de configuration de notre projet Cloud (fichier ServiceConfiguration.Cloud.cscfg):

<Setting name="ACSConfiguration" value="https://monapp.accesscontrol.windows.net/v2/metadata/IdentityProviders.js?protocol=wsfederation&amp;realm=http://monapp.cloudapp.net/&amp;reply_to=&amp;context=&amp;request_id=&amp;version=1.0&amp;callback=" />

Comme on peut le voir ci-dessus, on a supprimé l’adresse de réponse donnée par la configuration ACS et nous allons donc la changer au besoin.

 

Dans votre action de login voici comment procéder:

1 – Récupération de l’url du JSON, enregistrée en paramètre:

                var acsJson = configManager.GetSetting("ACSConfiguration");

 

2 - Prenons une variable callbackUrl, contenant l’URL d’origine appelée par l’utilisateur, on l’encore au format URL:

                string url = System.Web.HttpUtility.UrlEncode(callbackUrl);

 

3 – Avec une expression régulière on insère notre url de callback dans le paramètre Reply_To:

                string pattern = "reply_to=";
                string replacement = string.Concat("reply_to=", url);
                Regex rgx = new Regex(pattern);
                string result = rgx.Replace(acsJson, replacement);

4 – Enfin on appelle l’url puis on traite le JSON pour récupérer les chaînes de connection à nos providers:

                var response = HttpWebRequest.Create(result).GetResponse();

                var deserializer = new DataContractJsonSerializer(typeof(List<AcsIdentityProvider>));

                using (var stream = response.GetResponseStream())
                {
                    providers = deserializer.ReadObject(stream) as List<AcsIdentityProvider>;

                }

 

Les utilisateurs seront alors redirigé par ACS sur la page donnée dans la variable callbackUrl passé à la fonction de login après authentification. Difficile de faire plus simple… il suffisait de le savoir!

Smile

Publié jeudi 18 octobre 2012 14:28 par Philess
Classé sous : ,
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

Pas de commentaires
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Intégration Yammer et SharePoint Online (Office 365), étape 1 … par Le blog de Patrick [MVP SharePoint] le 06-12-2013, 17:37

- [Dynamics CRM] Ajouter les dossiers de CRM au dossier Favoris d’Outlook par Christine Dubois le 06-10-2013, 15:50

- Visual Studio 2013 par Etienne Margraff le 06-04-2013, 10:26

- Configurer la collation SQL Server pour SharePoint par Blog de Jérémy Jeanson le 06-03-2013, 19:48

- Etendre le Team Web Access de TFS 2012 – Step 1: Création du plugin par Philippe Didiergeorges Aka Philess le 06-03-2013, 07:30

- Livre Blanc : Développer des applications NUI par Fathi Bellahcene le 06-01-2013, 11:35

- [Dynamics CRM 2011] Copier une vue d'entité par Christine Dubois le 05-29-2013, 13:20

- [Conf’SharePoint 2013] Mes présentations… par Le blog de Patrick [MVP SharePoint] le 05-28-2013, 09:04

- [wpdev] Storage bug in MediaLibrary.SavePicture par Kévin Gosse le 05-26-2013, 19:08

- VMMap en mode instrumentation sur système 64bit : attention à la plateforme cible du build .NET par CoqBlog le 05-25-2013, 22:25