Ik probeer te redirecten naar een een google service op basis van een geldig Auth token, Het token wordt sucsesvol verkregen, maar het redirecten naar een service op basis van dit token krijg ik niet voor elkaar. Google reageert met HTTP 411 code: "POST requests require a Content-length header."
Ok, als ik een Content-length header toevoeg:
dispatcherX.setRequestHeader("Content-length", "0")
dan blijf ik die melding houden, ook als ik andere waarden dan 0 invul. Hoe bepaal ik wat hier in moet komen te staan? Ik post verder geen parameters vandaar DispatcherX.send(null)
Voordat ik reacties over de aanpak krijg:
- De AuthSub interface is niet bruikbaar want dan moeten gebruikers nog steeds zelf hun login en wachtwoord intypen. Onze gebruikers kennen hun wachtwoord niet deze komen uit onze eigen administratie.
- Gebruik maken van de SSO (SAML) API is beter, maar dat kan ik niet in korte termijn in productie brengen.
Ok, als ik een Content-length header toevoeg:
dispatcherX.setRequestHeader("Content-length", "0")
dan blijf ik die melding houden, ook als ik andere waarden dan 0 invul. Hoe bepaal ik wat hier in moet komen te staan? Ik post verder geen parameters vandaar DispatcherX.send(null)
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
| function performRedirect() { try { netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); } catch (e) { window.alert("Permission UniversalBrowserRead denied."); return false; } var dispatcher = new XMLHttpRequest(); dispatcher.onreadystatechange = function() { if (dispatcher.readyState == REQUEST_IN_PROGRESS) { var token = getAuthenticationToken(dispatcher.responseText); redirect(token); } } dispatcher.open("POST", "https://www.google.com/accounts/ClientLogin", true); dispatcher.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); dispatcher.send("&Email=gebruiker@bedrijf.nl&Passwd=Geheim&accountType=HOSTED&service=cl"); } function redirect(token) { try { netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); } catch (e) { window.alert("Permission UniversalBrowserRead denied."); return false; } var dispatcherX = new XMLHttpRequest(); dispatcherX.onreadystatechange = function() { if (dispatcherX.readyState == REQUEST_IN_PROGRESS) { document.write(dispatcherX.responseText); } } dispatcherX.open("POST", "http://docs.google.com/a/bedrijf.nl", true); dispatcherX.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); dispatcherX.setRequestHeader("Authorization", "GoogleLogin auth=" + token); dispatcherX.send(null); } |
HTML:
1
2
3
4
5
6
| <html> <head> <script language="JavaScript" src="redirect.js"></script> </head> <body onLoad="performRedirect();"></body> </html> |
Voordat ik reacties over de aanpak krijg:
- De AuthSub interface is niet bruikbaar want dan moeten gebruikers nog steeds zelf hun login en wachtwoord intypen. Onze gebruikers kennen hun wachtwoord niet deze komen uit onze eigen administratie.
- Gebruik maken van de SSO (SAML) API is beter, maar dat kan ik niet in korte termijn in productie brengen.
"Kill one man, and you are a murderer. Kill millions of men, and you are a conqueror. Kill them all, and you are a god." -- Jean Rostand