web-dev-qa-db-fra.com

L'utilisation de curl avec l'authentification NTLM pour créer une publication échoue

Je n'arrive pas à envelopper ma tête autour de ça. J'essaie de script automatiser le téléchargement d'un csv mais la boucle échoue avec un 401.

curl -v --ntlm -u username --upload-file ~/galaxy/forums/pt_update.csv https://connect.example.com/11063/csv_import?op=add -k
Enter Host password for user 'username:
* About to connect() to connect.example.com port 443 (#0)
*   Trying x.x.x.x... connected
* successfully set certificate verify locations:
*   CAfile: none
  CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS handshake, Server finished (14):
* SSLv3, TLS handshake, Client key exchange (16):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSL connection using RC4-MD5
* Server certificate:
*    subject: C=US; ST=Washington; L=internetland; O=example.com Inc.; CN=connect.example.com
*    start date: 2012-06-11 14:53:47 GMT
*    expire date: 2013-06-11 14:53:47 GMT
*    common name: connect.example.com (matched)
*    issuer: DC=com; DC=example; DC=ant; CN=example.com Infosec CA G2
*    SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway.
* Server auth using NTLM with user 'username'
> PUT /11063/csv_import?op=add HTTP/1.1
> Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
> User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
> Host: connect.example.com
> Accept: */*
> Content-Length: 0
> Expect: 100-continue
> 
< HTTP/1.1 401 Authorization Required
< Date: Fri, 29 Mar 2013 03:47:00 GMT
< Server: Server
< WWW-Authenticate: Basic realm="ANT (Windows) Login"
< Content-Length: 401
< Connection: close
< Content-Type: text/html; charset=iso-8859-1
< 
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>401 Authorization Required</title>
</head><body>
<h1>Authorization Required</h1>
<p>This server could not verify that you
are authorized to access the document
requested.  Either you supplied the wrong
credentials (e.g., bad password), or your
browser doesn't understand how to supply
the credentials required.</p>
</body></html>
* Closing connection #0
* SSLv3, TLS alert, Client hello (1):

J'ai remplacé l'exemple où se trouve mon domaine réel et j'utilise très certainement le bon nom d'utilisateur/pw pour mon domaine.

20
Juddles

Les oeuvres suivantes

curl -X POST -k -v --ntlm --negotiate -u usernamehere -F "csv=@pt_update.csv" -F "op=add" "https://google.com/csv_import"

12
Juddles

Vous essayez ceci

Si vous avez une page hébergée dans IIS et qui fonctionne avec NTLM, vous devez mettre:

(par exemple sur la page Sharepoint)

curl http://enterprisesharepoint -v --ntlm --negotiate -u USER123:PASSWORD123

Cela fonctionne très bien pour moi et vous pouvez voir le message des en-têtes

--Éditer--

si vous mettez à négocier, cela donne le compte local et connectez-vous avec le serveur, si un nom d'utilisateur et un mot de passe sont incorrects, ce n'est pas grave parce que négocier fait l'autentification automatique avec le compte Windows pour l'utilisateur local connecté. Si vous n'aimez pas ce comportement, vous ne devez indiquer que ntlm pour une connexion ntlm correcte.