Quoi, tu ne connais pas PB ? Va falloir parcourir tout le forum alors !

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.
  • Index
  •  » Powerscripts
  •  » Controle utilisateur avec windows et active directory

#1 25-09-2007 07:08:42

le_gone_de_lyon  
Membre Geek
Lieu: LYON
Date d'inscription: 12-09-2006
Messages: 64
Pépites: 203
Banque: 0

Controle utilisateur avec windows et active directory

Bonjour,

Actuellement, nous avons une application gérée avec une identification propre à notre logiciel.

Notre client demande de pouvoir gérer cette applcation avec un controle de l'utisateur et du mot de passe par l'ACTIVE DIRECTORY.

La gestion des utilsateurs et des droits serait géré par l'ACTIVE DIRECTORY.

Donc il faudrait au démarrage de notre application, après la saisie de l'opérateur et de son mot de passe, controler son existance via ACTIVE DIRECTOY et non plus par notre gestion interne.

Je ne connais pas ACTIVE DIRECTORY.

Existe-t-il des fonctions, des API pour effectuer ce controle.

D'avance merci pour vos réponses

Cordialement

Le gone de lyon

Hors ligne

 

#2 25-09-2007 07:33:49

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: Controle utilisateur avec windows et active directory

Bonjour, regarde du côté de API ADSI

code sample trouvé sur sybase.public.powerbuilder.general

Code: pb

OLEObject  l_ole, l_ole2
int    li_rc
string   ls_dept, ls_user, ls_site, ls_computername, ls_path, ls_domain
long    ll_cnt
CONSTANT int TEXTCOMPARE = 1, BINARYCOMPARE = 0, DATABASECOMPARE = 2

l_ole = CREATE OLEObject
li_rc = l_ole.ConnectToNewObject( "ADSystemInfo")

IF li_rc = 0 THEN
 ls_computername = l_ole.computername //CN=CAL26040,OU=Computers,OU=calgary,DC=forestoil,DC=com
 ls_site = l_ole.sitename     // calgary
 ls_user = l_ole.username     // CN=Terry Dykstra(tddykstra),OU=Users,OU=calgary,DC=forestoil,DC=com
 ls_domain = l_ole.domaindnsname    // forestoil.com

 l_ole2 = CREATE OLEObject
 li_rc = l_ole2.ConnectToObject("LDAP://" + ls_user)

 IF li_rc = 0 THEN
   ls_dept = l_ole2.department
   ls_user = l_ole2.description
   ls_computername = l_ole2.name
 END IF

END IF

l_ole2.DisConnectObject()
DESTROY l_ole2
l_ole.DisConnectObject()
DESTROY l_ole

N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#3 20-10-2014 14:26:49

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1120
Pépites: 4,296,080,217
Banque: 9,223,372,036,854,776,000
Site web

Re: Controle utilisateur avec windows et active directory

Déterrage en règle

Je viens de bosser un bout de code pour authentifier un user / mot de passe sur le domaine : au lieu de vérifier simplement que le user existe comme avec le code précédent, on passe le couple login / pwd au domaine qui réponds si le login est OK.
Ça permet de déporter la gestion des mots de passe (complexité, expiration, ...) dans l'Active Directory.

Code: pb

public function boolean checklogin (string as_domain, string as_login, string as_pwd);
boolean lb_ret = false
int li_ret
oleobject o_ldap, o_dse, o_check
string ls_path, ls_domain 

constant long ADS_SECURE_AUTHENTICATION = 1
constant long ADS_CHASE_REFERRALS_ALWAYS = 96 //&H60

o_ldap = create oleobject
li_ret = o_ldap.connecttoobject("LDAP:")
//outputdebugstring("connecttoobject LDAP =" + string(li_ret))

o_dse = create oleobject
li_ret = o_dse.connecttoobject("LDAP://RootDSE")
//outputdebugstring("connecttoobject LDAP://RootDSE =" + string(li_ret))

ls_domain = o_dse.Get("rootDomainNamingContext")
ls_path = "LDAP://OU=Users," + ls_domain
try
  o_check = o_ldap.OpenDSObject(ls_path, as_login, as_pwd, ADS_SECURE_AUTHENTICATION + ADS_CHASE_REFERRALS_ALWAYS)
  lb_ret = true
catch (oleruntimeerror ore)
  //error or invalid password
  //outputdebugstring("OpenDSObject error " + ore.getmessage())
end try

o_ldap.DisconnectObject()
destroy o_ldap
o_dse.DisconnectObject()
destroy o_dse

return lb_ret

end function

The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#4 18-05-2016 13:05:48

Snykito  
Membre
Date d'inscription: 27-01-2016
Messages: 2
Pépites: 13
Banque: 0

Re: Controle utilisateur avec windows et active directory

Bonjour,
Seki, je n'arrive pas a utiliser ton code.
L'argument as_domain n'est jamais utilisé dans ton code.. Est-ce normal ?
Merci

Hors ligne

 

#5 18-05-2016 16:14:40

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: Controle utilisateur avec windows et active directory

Snykito a écrit:

Bonjour,
Seki, je n'arrive pas a utiliser ton code.
L'argument as_domain n'est jamais utilisé dans ton code.. Est-ce normal ?
Merci

J'imagine que as_domain -> ls_domain.

Déterrage pour déterrage, j'ai qqchose sous le coude aussi :

Code: pb

// fonction externe ============================================

FUNCTION long ADsOpenObject(string path, string userName, string password, long flags, ref GUID iid, ref long ppObject) library "activeds.dll"  


// fonction wf_getdomain ============================================

String    ls_domain
OLEObject lole_ldap

lole_ldap = Create OLEObject
lole_ldap.ConnectToNewObject( "ADSystemInfo" )
ls_domain = String( lole_ldap.DomainDNSName )
Destroy lole_ldap

Return ls_domain


// fonction wf_testconnection ============================================
Long   ll_pp, ll_return 
String ls_message, ls_domain
GUID   ls_iid  


// IUnknown interface = 00000000-0000-0000-C000-000000000046  
ls_iid.data4[1] = Char( 192 )   
ls_iid.data4[4] = Char( 17920 )

// récup du domaine
ls_domain = wf_getdomain( )

// test de la connexion
ll_return = ADsOpenObject( "LDAP://" + ls_domain, as_login, as_password, 1, Ref ls_iid, Ref ll_pp)  
 
// message d'erreur
Choose Case ll_return  
  
  Case 0 // ok
  Case -2147023570 ; ls_message = f_message( -21, "Utilisateur inconnu ou mot de passe incorrect." )
  Case -2147943730 ; ls_message = f_message( -22, "Mot de passe expiré.                  " )
  Case -2147943731 ; ls_message = f_message( -23, "Compte désactivé.                     " )
  Case -2147943755 ; ls_message = f_message( -24, "Domaine non trouvé.                   " )
  Case -2147943763 ; ls_message = f_message( -25, "Identifiant de connexion déjà utilisé." )
  Case Else        ; ls_message = f_message( -26, "Erreur inconnue.                      " )
    
End Choose  

If ll_return <> 0 Then 
  
  f_messagebox( -20, "Connexion impossible", "Erreur active directory :~n%1", &
                StopSign!, Ok!, 1, gs_tab_vide, { ls_message } )
  
End If

Return ( ll_return = 0 )

N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#6 16-10-2018 13:35:19

rapitou  
Membre Power Geek
Date d'inscription: 29-03-2007
Messages: 163
Pépites: 661
Banque: 0

Re: Controle utilisateur avec windows et active directory

Salut

Déterrage pour déterrage !
Comment déclarer le type GUID qui n'est pas reconnu en natif par PB ?

Merci

Hors ligne

 

#7 16-10-2018 13:39:58

rapitou  
Membre Power Geek
Date d'inscription: 29-03-2007
Messages: 163
Pépites: 661
Banque: 0

Re: Controle utilisateur avec windows et active directory

Bon c'est bon j'ai trouvé :

Code: pb

TYPE GUID FROM structure
 unsignedlong  data1
 unsignedinteger  data2
 unsignedinteger  data3
 unsignedinteger  data4[4]
END TYPE

Hors ligne

 
  • Index
  •  » Powerscripts
  •  » Controle utilisateur avec windows et active directory

Pied de page des forums

Propulsé par FluxBB 1.2.22