2009-07-23 10 views
4

Mon application Windows écrite en C++ (essentiellement un serveur proxy HTTP/1.1) écoute les requêtes de divers utilisateurs. Actuellement, il est capable d'envoyer un défi de base 407 et de traiter la réponse des en-têtes. Je sais que je dois modifier les en-têtes de défi, de sorte que les navigateurs clients effectuent une réponse basée sur NTLM à des fins d'authentification. Mais ma question est - comment puis-je générer les bons jetons, nonce, etc. pour le 407 Authentication Challenge, puis comment puis-je valider si les réponses reçues sont correctes? Enfin, je voudrais enregistrer le nom d'utilisateur du client et d'autres propriétés LDAP/ADS si possible.Authentification NTLM pour une application côté serveur Web

S'il vous plaît soyez gentil, et redirigez-moi vers les messages corrects s'il y a déjà des discussions qui traitent de quelque chose de similaire. La plupart des recherches sur le WWW m'amènent seulement à la programmation côté client, très peu ou presque aucune - pour le codage qui doit être fait dans le serveur HTTP.

Tous de bons hacks ici, un GRAND merci d'avance.

Répondre

1

Vous pouvez trouver l'inspiration en regardant le mod_auth_sspi module Apache

7

La réponse courte est que je pense que ce Using SSPI with a Windows Sockets Server exemple est votre meilleur lieu de départ et il devrait démontrer la base SSPI appels dont vous avez besoin. Il est écrit pour un serveur TCP ordinaire, mais les données de challenge/réponse sont envoyées via HTTP sans trop de complexité supplémentaire.

[MS-N2HT]: Negotiate and Nego2 HTTP Authentication Protocol

Je appuie la recommandation de révision the mod_auth_sspi for Apache code

Personnellement, je voudrais aussi essayer de fixer un débogueur de bas niveau pour IIS et voir comment il va à appeler les fonctions SSPI, mais peut-être pas ta tasse de thé. Une fois que vous êtes arrivé à ce point avec SSPI, l'obtention du nom d'utilisateur devrait être un jeu d'enfant (mais demandez si vous avez besoin d'aide). Les propriétés LDAP/AD pour l'utilisateur peuvent être interrogées avec ces API.

La réponse longue implique peu de lecture de la lumière:

Integrated Windows Authentication in Wikipedia

SPNEGO-based Kerberos and NTLM HTTP Authentication in Microsoft Windows

HTTP-Based Cross-Platform Authentication via the Negotiate Protocol (Part 1 of 3)

Partie 3 a ainsi quelques exemples de code intéressants.

Espérons que cela aide!

1

Après une lutte I J'ai réussi à aller aussi loin: Sur mon serveur proxy, je peux défier les clients pour l'authentification de base/NTLM. Lorsque l'utilisateur fait une réponse "Basic", je peux valider les informations d'identification en utilisant SSPI.Cette documentation a aidé: http://support.microsoft.com/kb/180548

Cependant, je ne suis tout simplement pas en mesure d'obtenir le challenge basé sur NTLM et les réponses complétées. Fondamentalement, je suis capable de "chatouiller" le client pour sélectionner le système d'authentification basé sur NTLM par 407 Proxy-authenicate, qui nécessite essentiellement 3 messages. Le premier message doit être une requête basée sur NTLM envoyée par le client, la seconde doit provenir de mon serveur et le troisième message doit provenir du client. Maintenant, le problème est "Comment puis-je générer le défi NTLM, puis déchiffrer ou valider l'autorisation NTLM, par exemple le message 3.

Et un grand merci à Marsh et les autres bons hacks, pour tous les efforts, vous avez pris pour faire la réponse que je ne peux qu'espérer que vous soyez prêt à partager un peu plus

2

Il y a code httpauth qui pourrait vous aider Il utilise le code smbval pour analyser un message NTLM 1 et 3. Voir:... http://memberwebs.com/stef/software/httpauth/

+0

httpauth Peut-être bien utilisable, mais malheureusement, la documentation n'est pas suffisante, mais cela semble très prometteur: le dossier docs contient un protocols.txt mais il en faut un pour pirater beaucoup de choses! jusqu'à jouer avec, et je ne sais pas si cela fonctionne vraiment. Mais si c'est le cas, cela peut amener les gars du cartel de calamar/samba à sauter hors de leurs chaussettes! Je suis sûr qu'il y a plus de gens comme moi qui souhaitent que ça fonctionne vraiment! – mdk

+0

J'ai extrait httpauth, pour l'authentification NTLM pour la version linux de mon serveur proxy. C'est une excellente solution à utiliser, bien meilleure que la solution ntlm_auth + winbind, et certainement beaucoup plus élégante. Certainement, c'est une sorte de solution que l'on voudrait utiliser à côté des applications multi-thread. N'ont pas encore étudié l'idée de réutiliser des parties des codes de httpauth. Attention - httpauth ne prend pas en charge les en-têtes proxy-authenticate de façon inhérente, donc les applications proxy doivent faire un peu de travail supplémentaire. – mdk

Questions connexes