J'essaie d'utiliser le Compte tenu d'un nom d'utilisateur (ou d'un DN) et d'un mot de passe, Comment puis-je accéder à la structure code> Berval fort> que je suis censé passer à Les exemples que j'ai trouvés jusqu'à présent p>
En tant que note latérale, l'objectif est de pouvoir se lier sur SASL à une variété de serveurs LDAP; Pour l'instant: ActiveDirectory et OpenLDap. P>
Tous les pointeurs seront grandement appréciés. P> LDAP_SASL_BIND_S code> méthode à partir du SDK Microsoft LDAP C, avec GSSAPI STROR> comme mécanisme d'authentification. LDAP_SASL_BIND_S code> attend les informations d'identification sous forme de structure code> Berval code>, qui est opaque. p>
ldap_sasl_bind_s < / code>? p>
ldap_sasl_bind_s code> lorsque l'authentification simple est souhaitée - mais j'ai besoin d'utiliser gssapi li>
ldap_sasl_interactive_bind_s code> lorsque d'autres mécanismes d'authentification SASL sont souhaités. Cependant, il n'y a pas de ldap_sasl_interactive_bind_s code> dans Microsoft SDK. LI>
ul>
3 Réponses :
J'ai réussi à effectuer une liaison LDAP SASL sur GSSAPI, en utilisant Pour une description abstraite des actions Un client et un serveur doivent effectuer lors d'une authentification GSSAPI SASL, Les informations d'identification Dans le SDK Microsoft, Kerberos est disponible via SSPI - qui est à peu près l'implémentation Microsoft de GSSAPI; Les méthodes qui sont pertinentes pour notre cas particulier sont les suivantes: Un LDAP SASL BIND sur Kerberos a 3 phases. P>
appel Si tous les arguments importants sont corrects - des informations d'identification valides, valides SPN, appel En tant que note latérale, l'erreur LDAP la plus récente pour une session LDAP peut être découverte en appelant Après l'appel réussi à Ce second appel à Ce jeton de sortie vide doit être utilisé comme des informations d'identification du client pour un autre appel à Après le deuxième appel réussi à Le client doit construire sa réponse en fonction des informations du même RFC. La réponse Le client construit doit ensuite être passé en entrée sur ldap_sasl_bind_s code>. Pour les personnes intéressées, voici quelques pointeurs. P>
ldap_sasl_bind_s code> attendent - leur forme et leur signification - dépendent du mécanisme d'authentification réel utilisé, ce qui est dans notre cas Kerberos. P>
AcquireCredentialShandle Code>, InitialiseSecurityContext Code>, DecryptMessage Code>, EncryptMessage Code> P> P> P>
Phase 1 h3>
AcquireCreDentialShandle code> et InitialiseSecurityContext code>.
Notes importantes ici: P>
AcquireCreDentialShandle code> un pointeur sur un SEC_WINNT_AUTH_IENTITITY code> structure contenant les informations d'identification réelles (royaume, nom d'utilisateur, mot de passe) ou null code> si les informations d'identification du fil actuel doit être utilisé li>
initialisiseSecurityContext code>, l'authentification mutuelle doit être demandée. LI>
ul>
null code> jeton d'entrée - The InitialiseSeCurityContext Code> L'appel doit renvoyer sec_i_continue_needed (code> et bien remplir le jeton de sortie. Le contenu de ce jeton de sortie devrait aller dans le Berval code> structure ldap_sasl_bind_s code> s'attend en tant que références clientes. P>
ldap_sasl_bind_s code> avec le jeton de sortie à partir de initialisationSecurityContext code> comme des informations d'identification du client. Si tous les arguments sont corrects - vides DN, GSSAPI en tant que nom de mécanisme - l'appel actuel doit renvoyer ldap_success ldap_success la plus récente erreur LDAP pour la session LDAP doit être ldap_sasl_bind_in_progress code>. < / p>
ldap_get_option code> sur la session, avec ldap_opt_error_number code> comme option. P >
Phase 2 h3>
ldap_sasl_bind_s code>, son dernier argument pointe vers un BERVAL code> structure contenant les informations d'identification du serveur. Le contenu de cette structure code> BERVAL code> doit maintenant être utilisé comme jeton d'entrée pour le deuxième appel à InitialiseSecurityContext Code>. P>.
InitialiseSecurityContext Code> doit renvoyer sec_ok code> et un jeton de sortie vide. P>
ldap_sasl_bind_s code>. Ce second appel à ldap_sasl_bind_s code> doit renvoyer ldap_success code>, avec l'erreur LDAP la plus récente de la session LDAP étant ldap_sasl_bind_in_progress p>. P>.
Phase 3 h3>
ldap_sasl_bind_s code>, son dernier argument pointe vers un BERVAL code> structure contenant des données du serveur. Ces données de serveur doivent être données comme entrée sur déchiffsmessage code>. Comme spécifié dans le RFC mentionné précédemment, les données déchiffrées doivent être de 4 octets longs. P>
chiffrementMessage code>. La sortie de l'appel code> cryptMessage code> doit ensuite être transmise en tant que lettres d'identification du client pour le troisième et dernier appel à ldap_sasl_bind_s code>. P>.
chiffrermessage code> sous Kerberos semble être incomplète. La recherche de code de Google doit aider avec un exemple de travail. De plus, pour un exemple de travail du flux décrit ci-dessus, le code source de Samba peut être consulté. P>
Bonjour Catalina! J'ai suivi les étapes que vous avez décrites, mais j'ai un problème, j'espère que vous pourrez m'aider. L'appel LDAP_SASL_BIND_S Appel sur la phase 1 retourne le succès, ldap_get_option renvoie ldap_sasl_bind_in_progress, mais le dernier paramètre pointe vers une structure Bervale vide (taille zéro). Si j'utilise ces données pour créer la structure SecbufferDesc pour la phase 2, l'appel suivant à l'initialisationSecurityContext renvoie SEC_E_INVALID_Token. Ldap_sasl_bind_s est-il censé renvoyer un Berval vide ou je fais quelque chose de mal? Merci d'avance! Juan
La seule chose qui me vient à l'esprit est un drapeau ISC_REQ_Mutual_Auth manquant avant le premier appel à l'initialisationSecurityContext.
+1 bonnes choses. Si triste que pas trop de personnes dans Stackoverflow apprécient votre travail.
Bonjour Catalina! Peut-être que vous pouvez m'aider avec ma question Stackoverflow.com/q/14394642/475821 merci!
@ESMIRNOV: Malheureusement, je n'ai pas pu comprendre comment protéger avec succès la communication LDAP qui est venue après un LDAP_SASL_BIND_S (GSSAPI), et j'ai finalement abandonné. Je suis désolé de ne pas pouvoir être d'une aide plus d'aide.
Bonjour Catalina! J'ai suivi les étapes que vous avez décrites et avoir des problèmes avec le dernier (troisième) appel à ldap_sasl_bind_s peut-être que vous pouvez m'aider à ma question ici, Stackoverflow.com/questions/32554950 / ... , pourriez-vous s'il vous plaît jeter un coup d'œil à cela? Pour autant que je sache, je fais tout comme vous l'avez décrit ici cependant, je reçois une erreur de qualification non valide après le dernier appel de LDAP_SASL_BIND_S.
J'ai trouvé le problème. P>
Selon ce thread ( https://groups.google.com/group/microsoft.public.active.directory.interfaces/browse_threadle/thread/9c3fe85E520f0b4/820A136E032946fe9?pli=1 ) Il existe un bug avec ldap_sasl_bind_s renvoyant le serveur vide Critiques dans Windows XP. J'ai testé mon application sous Windows 2008 Server et les informations d'identification sont correctement renvoyées. P>
Il suffit de frapper le même bug et passé une journée à essayer de le clouer. Merci d'avoir partagé, Juan!