PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WEBDEV 24 → SSO avec SAML 2.0
SSO avec SAML 2.0
Débuté par YWE, 07 fév. 2018 21:40 - 10 réponses
Membre enregistré
32 messages
Posté le 07 février 2018 - 21:40
Bonjour,
j'ai developpé un site en webdev 23 en mode classique.
Le client impose de faire du SSO avec le protocole SAML 2.0.
N'ayant pas trouvé de solution dans les forums, je me suis orienté vers des solutions qui existent déjà mais dans d'autres technos.
J'ai donc choisi un module d'authentification en java/jsp/spring.
Ce module sera deployé dans un serveur Tomcat(moteur de servlet) et accessible via hhtp://serveurJEE/module_Auth
Mon appli webdev lui sera accessible : http://serveurIIS/AppliWeb
Le mode opératoire que je souhaite est le suivant :
1- l'internaute accède au site webdev
2- le site webdev le redirige vers le module d'authentification ou il saisira ses identifiants/Mot de passe
3- le module d'authentification redirige vers le module webdev avec les infos nécessaire

Mes questions :
- Est ce que cette solution est bonne ?
- Quelle fonction coté webdev utiliseriez vous pour faire la redirection et surtout pour recuperer les infos provenants de la jsp
Pour info, j'utilise pour la redirection : ScriptAffiche("hhtp://serveurJEE/module_Auth")

Merci pour vos retours.

--
Bon dev !
Membre enregistré
32 messages
Posté le 22 février 2018 - 16:27
Bonjour,
quelqu'un peut m'aider svp ?

--
Bon dev !
Posté le 26 février 2018 - 15:44
Bonjour,

Si votre SSO est CAS (https://fr.wikipedia.org/wiki/Central_Authentication_Service), un collègue à développé une librairie cliente en webdev qui fonctionne parfaitement.

Cordialement
Posté le 28 février 2018 - 14:25
Bonjour,

Le module m'intéresse grandement si vous avez un lien pour le télécharger.

Cordialement,
Membre enregistré
32 messages
Posté le 01 mars 2018 - 00:02
E. Payan a écrit :
Bonjour,

Si votre SSO est CAS (https://fr.wikipedia.org/wiki/Central_Authentication_Service), un collègue à développé une librairie cliente en webdev qui fonctionne parfaitement.

Cordialement

Bonjour,
merci pour votre réponse. La solution ou la démarche m'intéresse vivement. Pouvez vous si possible nous donnez quelques éléments ?

--
Bon dev !
Membre enregistré
10 messages
Posté le 01 mars 2018 - 17:15
Le code réside en une procédure global.

Son appel :
- redirige le visiteur vers l'authentification si besoin
- renvoi le login du visiteur
Ex (par exemple dans le code d'initialisation du projet):
gsLogin est une chaine
gsLogin=GetLoginCAS()

Attentions, en cas de paramètre dans l'URL, seul le 1er paramètre est conservé, les autres sont perdus.
Une seul chose à configurer : l'URL du serveur CAS (gsCas_Server)

Testé et largement utilisé en Webdev 21.


Voici la procédure :

// Résumé : <indiquez ici ce que fait la procédure>
// Lorsque un visiteur tente d'accéder à une page / zone intranet, au lieu de lui demander ces identifiants, on le redirige vers le CAS.
// L'utilisateur s'identifie sur le CAS, le CAS le ramène sur le service avec un Service Ticket (ST). Puis le service valide ce ST auprès du CAS qui va alors retourner le login de l'utilisateur.
//- étape 1 : obtention du Service Ticket (ST)
//- étape 2 : Vérification du Service Ticket Indiquez ici un exemple d'utilisation.

// Auteur :
// L. Faurtier

// Syntaxe :
//[ <Résultat> = ] GetLoginCAS ()

// Paramètres :
// Aucun
// Valeur de retour :
// chaîne ANSI :

PROCEDURE GetLoginCAS()

//Variables générales
gsUrlCas est une chaîne = ""
gsUrlService est une chaîne
gsResultat est une chaîne
sGsLoginCASWebDev est une chaîne
gsCas_Server est une chaîne
gsTicket est une chaîne
gsListeQuery est une chaîne
gsMyLogon est une chaîne
gsSSL est une chaîne
gsMonServeur est une chaîne
GsPathInfo est une chaîne

//SERVEUR CAS LYON 1
gsCas_Server = "https://cas.votredomaine.fr/cas/"

//DEBUT RECUPERATION DES VARIABLES D'ENVIRONNEMENT

//Paramètres présents dans l'URL
gsListeQuery = SysEnvironnement("QUERY_STRING")
gsListeQuery = Remplace(gsListeQuery,"QUERY_STRING=","")

//Isolement puis récupération du Ticket CAS présent dans l'URL
SI gsListeQuery <> "" ET PositionOccurrence(gsListeQuery,"ticket=",1)>0 ALORS
gnDebutPositionTicket est un entier
gnDebutPositionTicket = PositionOccurrence(gsListeQuery,"ticket=",1) + 7
gnLongueurgsListeQuery est un entier
gnLongueurgsListeQuery = Taille(Milieu(gsListeQuery,gnDebutPositionTicket))
gsTicket = Droite(gsListeQuery,gnLongueurgsListeQuery)
FIN
//Nom du script courant
gsMyLogon = SysEnvironnement("SCRIPT_NAME")
gsMyLogon = Remplace(gsMyLogon,"SCRIPT_NAME=","")

//Récupération Protocole https
gsSSL = SysEnvironnement("HTTPS")
gsSSL = Remplace(gsSSL,"HTTPS=","")

//Récupération de l'hote courant
SI gsSSL = "on" ALORS
gsMonServeur = "https://"+SysEnvironnement("HTTP_HOST")
SINON
gsMonServeur = "http://"+SysEnvironnement("HTTP_HOST")
FIN

//gsMonServeur = "https://"+SysEnvironnement("HTTP_HOST")
gsMonServeur = Remplace(gsMonServeur,"HTTP_HOST=","")

//Chemin utilisé pour accéder au script
GsPathInfo = SysEnvironnement("PATH_INFO")
SI GsPathInfo <> "" AND gsMonServeur<>"http://localhost" ALORS
GsPathInfo = Remplace(GsPathInfo,"PATH_INFO=","")
gsMyLogon = gsMyLogon + GsPathInfo
FIN

//FIN RECUPERATION DES VARIABLES D'ENVIRONNEMENT

//Fabrication de la partie d'URL CAS utilisé après "service=" = ********
//https://cas.mondomain.fr/cas/login…=********
gsUrlService = gsMonServeur + gsMyLogon + "?" + gsListeQuery

//DEBUT TRAITEMENT

//TEST DE L'EXISTANCE D'UN LOGIN CAS
SI sGsLoginCASWebDev = "" ALORS
//TEST DE L'EXISTANCE D'UN TICKET CAS
SI gsTicket = "" ALORS

//FABRICATION DE LA PORTION D'URL POUR PERMETTRE L'AUTHENTIFICATION SUR CAS (login?****)
SI SansEspace(gsListeQuery)<> "" ALORS
gsMyLogon = gsMyLogon + "?" + gsListeQuery
FIN

//REDIRECTION VERS LE SERVER CAS POUR SE LOGGUER
ScriptAffiche(gsCas_Server+"login","service="+gsMonServeur+gsMyLogon)

//¨POUR PERMETTRE LE MODE DEBUG EN LOCAL
// SINON ON SUPPRIME LA 1ERE SESSION POUR NE PAS FAIRE DOUBLON DE SESSION SUR LE SERVEUR D'APPLICATION
SI ChaîneOccurrence(Minuscule(gsMonServeur),"localhost") = 0 ALORS
FinProgramme()
FIN

SINON

//FABRICATION DE LA PORTION D'URL POUR PERMETTRE LA VALIDATION DU TICKET CAS (validate?****)
gsUrlCas = gsCas_Server + "validate?service=" +gsUrlService + "&ticket="+ gsTicket

//APPEL DU WEBSERVICE POUR VALIDER LE TICKET CAS
SI HTTPRequête(URLEncode(gsUrlCas)) ALORS
gsResultat = HTTPDonneRésultat() // Recup du CR au format XML
//TRAITEMENT DE LA VALIDATION ET ISOLEMENT DU LOGIN UTILISATEUR
SI Majuscule(ExtraitChaîne(gsResultat,1,Caract(10)))="YES" ALORS

//RECUPERATION DU LOGIN
sGsLoginCASWebDev = ExtraitChaîne(gsResultat,2,Caract(10))
//SI LOGIN VIDE
SI SansEspace(sGsLoginCASWebDev) = "" ALORS
//REDIRECTION VERS LE SERVER CAS POUR SE RE-LOGGUER
ScriptAffiche(gsCas_Server+"login","service="+gsMonServeur+gsMyLogon)
FinProgramme()
FIN

SINON
//REDIRECTION VERS LE SERVER CAS POUR SE RE-LOGGUER
ScriptAffiche(gsCas_Server+"login","service="+gsMonServeur+gsMyLogon)
FinProgramme()
FIN

//LE XML CAS NE RENVOIE RIEN
SINON
//REDIRECTION VERS LE SERVER CAS POUR SE RE-LOGGUER
ScriptAffiche(gsCas_Server+"login","service="+gsMonServeur+gsMyLogon)
FinProgramme()
FIN

FIN

FIN

RENVOYER sGsLoginCASWebDev
Message modifié, 01 mars 2018 - 17:19
Membre enregistré
10 messages
Posté le 01 mars 2018 - 17:23
Si quelqu'un à le temps, il serrait intéressant de voir l'usage de ce type de SSO dans le framework de sécurité de WebDev (Groupware utilisateur).
Posté le 17 octobre 2019 - 00:54
Bonjour,

J'ai développé un module d'utilisation SSO avec l'ADFS en utilsant oAuth2.

Je peux vous aider si vous avec toujours besoin.

Merci
Membre enregistré
32 messages
Posté le 24 octobre 2019 - 13:41
Karim a écrit :
Bonjour,

J'ai développé un module d'utilisation SSO avec l'ADFS en utilsant oAuth2.

Je peux vous aider si vous avec toujours besoin.

Merci

Bonjour Karim,
désolé, je viens de voir le message.
Le projet n'est plus d'actualité, mais je suis intéressé pour les développements futurs.

--
Bon dev !
Version Windev : 23
Membre enregistré
584 messages
Posté le 24 octobre 2019 - 15:02
Karim a écrit :
Bonjour,

J'ai développé un module d'utilisation SSO avec l'ADFS en utilsant oAuth2.

Je peux vous aider si vous avec toujours besoin.

Merci

Bonjour,

Je serais interessé

Jordan
Posté le 08 novembre 2019 - 16:08
Bonjour @karim,
Je souhaite mettre en place une authentification SSO sur nos applications webdev en intranet avec un AD, du coup ce que vous avez fait m’intéresse pour le donner à l'un de mes dev.
Pouvez-vous me fournir les éléments ?
Merci