Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

cURL XHR request icm NTLM authentificatie

Pagina: 1
Acties:

  • Clock
  • Registratie: Maart 2005
  • Laatst online: 21-11 06:22
Hi guys,

Ik wil graag data extracten uit een Sharepoint IDOL search engine, welke is vormgegeven in een MVC-based architectuur. Derhalve worden alle data requests gedaan middels AJAX naar een interne API, alles netjes in JSON format.

Met behulp van Firebug heb ik de requests kunnen analyseren, en ik probeer deze nu na te bootsen mbv cURL om zo een makeshift API te kunnen gebruiken voor mijn te bouwen tool. Hoe goed ik de request echter ook naboots, toch krijg ik constant een error uit de API ipv de juiste resultset - ik mis ergens dus nog iets. Ik kan niet uitvissen wat dit is, ik hoop dat een van jullie hier meer ervaring mee heeft.

API URL: http://portal.XXX.YYY.com/ius/JsonHandler.aspx (authenticate mbv NTML)
Request headers:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Cache-Control   no-cache
Connection  keep-alive
Content-Length  355
Content-Type    application/json; charset=UTF-8
Cookie  WSS_KeepSessionAuthenticated=80; imanTimezoneOffset=-3600; WorkSiteToken=4B652956B2A0419EB8B87D4103A635B79E2479C059D6A48917AEF10996FE58725CAC***********************73E29D4CA44AA79EC8298529E06AA6A7E1A1A700B10A7F06618786048B9B9ACA97CE24F46AC0917EB301DCEF60BF45395C4D51D4CCB01E0055B459AF807824FB4E28295D
Host    portal.XXX.YYY.com
Pragma  no-cache
Referer http://portal.XXX.YYY.com/ius/
User-Agent  Mozilla/5.0 (Windows NT 6.1; rv:30.0) Gecko/20100101 Firefox/30.0
X-Requested-With    XMLHttpRequest

JSON Request data
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
    "datasource": "expertsTab",
    "operation": "queryResultsData",
    "state": {
        "Text": "XXX YYY",
        "version": 2
    },
    "Text": "(XXX YYY) OR SP_ACCOUNTNAME:(none)",
    "skipAutoSynonyms": true,
    "biographyWeights": "",
    "timebillingWeights": "",
    "documentWeights": "",
    "biographyIds": "",
    "timebillingIds": "",
    "documentIds": "",
    "appName": "ius",
    "serviceUrl": "./JsonHandler.aspx"
}

Involved cookies
code:
1
2
3
4
5
6
7
--Received
WSS_KeepSessionAuthenticated = 80
imanTimezoneOffset = -3600
WorkSiteToken = 4B652956B2A0419EB8B87D4103A635B79E2479C059D6A48917AEF10996FE58725CAC08F9512AA87C46E2A9A10E61347FF0242EBC0C6AFFF6742CD7DFFAF802BFECEC421FE0C96B58928937F6B97D6D9DEF822C66CE99EA452DB61B*********************848626773E29D4CA44AA79EC8298529E06AA6A7E1A1A700B10A7F06618786048B9B9ACA97CE24F46AC0917EB301DCEF60BF45395C4D51D4CCB01E0055B459AF807824FB4E28295D

--Set
WorkSiteToken = 4B652956B2A0419EB8B87D4103A635B79E2479C059D6A48917AEF10996FE58725CAC08F9512AA87C46E2A9A10E61347FF0242EBC0C6AFFF6742CD7DFFAF802BFECEC421FE0C96B58928937F6B97D6D9DEF822C66CE99EA452DB61B*********************848626773E29D4CA44AA79EC8298529E06AA6A7E1A1A700B10A7F06618786048B9B9ACA97CE24F46AC0917EB301DCEF60BF45395C4D51D4CCB01E0055B459AF807824FB4E28295D


Deze request levert een nette JSON resultset op. Mijn poging tot het nabootsen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
curl 
--ntlm 
--negotiate 
-u user:pass 
-X POST 
-H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" 
-H "Accept-Language: en-US,en;q=0.5" 
-H "Cache-Control: no-cache" 
-H "Connection: keep-alive" 
-H "Content-Type: application/json; charset=UTF-8" 
-H "Host: portal.XXX.YYY.com" 
-H "Pragma: no-cache" 
-H "Referer: http://portal.XXX.YYY.com/ius/" 
-H "User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:30.0) Gecko/20100101 Firefox/30.0" 
-H "X-Requested-With: XMLHttpRequest" 
-H "Cookie: WSS_KeepSessionAuthenticated=80; imanTimezoneOffset=-3600; WorkSiteToken=4B652956B2A0419EB8B87D4103A635B79E2479C059D6A48917AEF10996FE58725CAC08F9512AA87C46E2A9A10E61347FF0242EBC0C6AFFF6742CD7DFFAF802BFECEC421FE0C96B58928937F6B97D6D9DEF822C66CE99EA452DB61B1A8********************8626773E29D4CA44AA79EC8298529E06AA6A7E1A1A700B10A7F06618786048B9B9ACA97CE24F46AC0917EB301DCEF60BF45395C4D51D4CCB01E0055B459AF807824FB4E28295D" 
-d '{"datasource":"expertsTab","operation":"queryResultsData","state":{"Text":"XXX YYY","version":2},"Text":"(XXX YYY) OR SP_ACCOUNTNAME:(none)","skipAutoSynonyms":true,"biographyWeights":"","timebillingWeights":"","documentWeights":"","biographyIds":"","timebillingIds":"","documentIds":"","appName":"ius","serviceUrl":"./JsonHandler.aspx"}'
http://portal.XXX.YYY.com/ius/JsonHandler.aspx


Dit levert een API error op (ongespecificeerd). Er zit dus een verschil tussen de request gedaan door de webapp en mijn nagebootste versies. Bij mijn weten heb ik echter alles gedekt: juiste headers, cookies meesturen, Authentificatie is succesvol. Wat o wat mis ik toch?

Thans

  • stager
  • Registratie: Juli 2014
  • Laatst online: 04-09 22:10
Staat er toevallig Windows en forms based authentication aan? Dan kan het zijn dat je nog een request header moet zetten (X-FORMS_BASED_AUTH_ACCEPTED, "f"). Verder geen ervaring met IDOL.

Als je tegen claims authentication aan praat kan je eventueel (moet je?) een fedauth cookie als authenticatie gebruiken.

Kan je wel andere zaken aanspreken op de omgeving via deze methode?

  • Clock
  • Registratie: Maart 2005
  • Laatst online: 21-11 06:22
stager schreef op dinsdag 22 juli 2014 @ 22:45:
Staat er toevallig Windows en forms based authentication aan? Dan kan het zijn dat je nog een request header moet zetten (X-FORMS_BASED_AUTH_ACCEPTED, "f"). Verder geen ervaring met IDOL.

Als je tegen claims authentication aan praat kan je eventueel (moet je?) een fedauth cookie als authenticatie gebruiken.

Kan je wel andere zaken aanspreken op de omgeving via deze methode?
Er is voor zover ik kan zien geen sprake van form based authentification, en een tryout met de genoemde header levert helaas geen resultaat op. Ook geen sprake van enige andere cookies dan degene die zijn opgenomen in de request.

Andere zaken krijg ik wel netjes binnen, inclusief een 401 als ik de auth parameters express aanpas. Ofwel ergens wordt aan de achterkant een sessie administratie bijgehouden (maar ik pass de actieve sessionID netjes mee) ofwel er gaat iets stoms mis met de request.

Frustrerend dit :)

  • stager
  • Registratie: Juli 2014
  • Laatst online: 04-09 22:10
Alles met SharePoint is frustrerend en dan hebben ze er ook nog een ander product op geplakt en dat werkt natuurlijk ook niet mee. Prak er eens een sniffer tussen en vergelijk je data. Als ik het goed heb zit je direct tegen een productie aan te praten en heb je geen testomgeving right?

  • Clock
  • Registratie: Maart 2005
  • Laatst online: 21-11 06:22
Ik was inderdaad al even met een sniffer in de weer om te kijken waar het nu misloopt. Uiteindelijk een stom probleem, zie hier het verschil tussen de 2 requests (links de cURL, rechts de webapp)
Afbeeldingslocatie: http://oi57.tinypic.com/2wf5xd2.jpg

Ik voerde het cURL commando uit rechtstreeks vanaf de command line. Het blijkt dat die bij lange strings (zoals de JSON data string) rare karakters toevoegd waarmee het JSON formaat geschonden wordt. Hierdoor wordt de request data verzonden als platte tekst ipv JSON, waar de API natuurlijk weer niks mee kan.

Oplossing: JSON data in textfile knallen en die door cURL laten inladen dmv "-d @filename.json".

Thanks voor de hulp!

  • EddoH
  • Registratie: Maart 2009
  • Niet online

EddoH

Backpfeifengesicht

Volgens mij heeft het meer te maken met het correct escapen van double quotes dan met 'rare tekens bij lange strings'

  • Clock
  • Registratie: Maart 2005
  • Laatst online: 21-11 06:22
EddoH schreef op woensdag 23 juli 2014 @ 15:12:
Volgens mij heeft het meer te maken met het correct escapen van double quotes dan met 'rare tekens bij lange strings'
Quite possibly, ik had deze ook niet ge-escaped met ^". Delivering the JSON from a file seems more reliable though, so I think I will keep using that.
Pagina: 1