Domino 9 und frühere Versionen > ND8: Entwicklung
Agent per Javascript/Ajax aufrufen, Authentifizierung?
m3:
Mehrere Punkte:
1) AJAX funktioniert prinzipiell nur, wenn der Request zur gleichen Internetdomain geschickt wird, von der auch die initiale Seite geladen wurde. Ansonsten würde man sehr schnell in ein Cross Site Scripting Problem laufen.
Siehe Link von abits:
--- Zitat ---dojo.xhrGet (and other functions in the same line: dojo.xhrPost, dojo.xhrDelete, dojo.xhrPut), are bound by the 'same domain' security policy of the browser. This means that they can only establish a connection back to the same server that served the HTML page. If you wish to use this API to talk to servers other than the one that originated your page, then you will have to use a proxy on your originating server and have it forward the requests. The only other solution to working around the same domain restriction is to use alternate IO methods, such as dojo.io.script.
--- Ende Zitat ---
2) AJAX unterstützt keine Domino Sesson authentication. Ihr müsst daher
a) den Domino-Server mit der initialen Seite auch in die Domain hängen und dann domainweites SSO aktivieren - dann sollte der Aufruf kein Problem sein.
b) - sollte die initiale Seite nicht von einem Domino Server kommen oder SSO keine Option sein - eine "Override Session Authentication" Web Rule einrichten, um die Authentication für den Agent Aufruf auf Basic umzudrehen.
Aber ACHTUNG: Auch wenn Du den Request über eine SSL-Verbdindung schickst, stehen Usernamen/Passwort in der initialen Seite im Klartext drinnen - Zugangssicherung ist das keine mehr, da kannst Du den Agent gleich für Anonymous frei schalten.
pram:
Hallo,
--- Zitat ---1) AJAX funktioniert prinzipiell nur, wenn der Request zur gleichen Internetdomain geschickt wird, von der auch die initiale Seite geladen wurde. Ansonsten würde man sehr schnell in ein Cross Site Scripting Problem laufen.
--- Ende Zitat ---
Das ist prinzipiell richtig, man kann aber durch Ändern der Response-HTTP-Header (wenn man es kann und darf) auf andere Domains zugreifen, siehe hier:
http://www.w3.org/TR/access-control/
bzw. nach "ajax cross origin" googlen
zu 2b
--- Zitat ---Aber ACHTUNG: Auch wenn Du den Request über eine SSL-Verbdindung schickst, stehen Usernamen/Passwort in der initialen Seite im Klartext drinnen - Zugangssicherung ist das keine mehr, da kannst Du den Agent gleich für Anonymous frei schalten.
--- Ende Zitat ---
Diese wäreaber nur auf dem PC des Absenders sichtbar und ist deshalb auch nicht von anderen sichtbar. Natürlich darf man das Passwort nicht im Quelltext ausliefern, sondern müsste (*) aus den HTTP-Headern der gerade geöffneten Seite den "Authorization" Header auslesen und beim nächsten XHR-Request übergeben. Der Browser macht das halt automatisch, wenn die URL's auf gleicher Domain liegen.
*) da ich auswendig nicht weiß wie man an diese Header ran kommt und ich bei google einige Beiträge gelesen habe, dass man in einem XHR-Request bei manchen Browsern den "Authorization" Header nicht ändern kann ist dies wohl nicht der richtige Weg.
ach ja und http(s)://username:passwort@... ist nicht standardisiert und funktioniert nur bis IE6 und bei Firefox kommt eine Warnung.
Fazit: dir bleibt nur SSO oder der Agent läuft auf ohne Authentifizierung.
Gruß
Roland
schroederk:
Wenn ich den Agenten ohne Authentifizierung laufen lassen würde,
habe ich dennoch die Möglichkeit auszulesen, wer den Aufruf gemacht hat?
Die IP-Adresse würde schon reichen, da ja nur der Webserver dürfte und diese IP fix ist.
schroederk:
Wie stelle ich denn die Sicherheit um, damit der Agent auch unter Anonymous läuft?
Ich habe unter den Einstellungen des Agenten unter Sicherheit das Häkchen bei "Als Webbenutzer ausführen",
beim Vorgabezugriff nur Anonymous angehakt und ebenfalls "Benutzer mit öffentl. Zugriff dürfen Agenten ausführen"
Dennoch wird beim Aufruf des Agenten im Browser das Authentifizierungsfenster angezeigt.
Ich versuche im Moment die Seite mittels cUrl vom Domino zu bekommen.
Ich bin mir recht sicher, dass darüber auch eine Authentifizierung möglich wäre, wenn die richtigen Parameter noch gesetzt werden (die ich bisher noch nicht gefunden habe)
--- Code: ---function open_https_url($url,$refer,$usecookie) {
if ($usecookie) {
if (file_exists($usecookie)) {
if (!is_writable($usecookie)) {
return "Error: Can't write to $usecookie cookie file, create an empty cookie.txt file in same folder as script";
}
} else {
$usecookie = "cookie.txt";
if (!is_writable($usecookie)) {
return "Error: Can't write to $usecookie cookie file, create an empty cookie.txt file in same folder as script";
}
}
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURL_HTTP_VERSION_1_1, true);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
if ($usecookie) {
curl_setopt($ch, CURLOPT_COOKIEJAR, $usecookie);
curl_setopt($ch, CURLOPT_COOKIEFILE, $usecookie);
}
if ($refer != "") {
curl_setopt($ch, CURLOPT_REFERER, $refer );
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$result = curl_exec ($ch);
$info = curl_getinfo($ch);
if ($result === false || $info['http_code'] != 200) {
$result = "Error: No cURL data returned for $url [". $info['http_code']. "]";
if (curl_error($ch)) {
$result .= "\n". curl_error($ch);
}
}
curl_close ($ch);
return $result;
}
$dateiurl = "https://myserver.com/mtester.nsf/TestAgent?OpenAgent&test1&test2&test3";
$datei = open_https_url($dateiurl,"",true);
print $datei;
--- Ende Code ---
pram:
Wie gesagt du müsstest den Autorization Header setzen:
http://stackoverflow.com/questions/1304974/set-authorization-header-using-php-and-curl
Autorization header ist normalerweise "Basic " + base64(User+":"+Passwort)
http://en.wikipedia.org/wiki/Basic_access_authentication
--- Zitat ---Wenn ich den Agenten ohne Authentifizierung laufen lassen würde,
habe ich dennoch die Möglichkeit auszulesen, wer den Aufruf gemacht hat?
--- Ende Zitat ---
Du musst auf der Javascript-Seite irgendwie den Usernamen ermitteln und dann beim Request übergeben, dafür könntest du dir eine HTML-Page (oder JS-Page) am Domino machen mit Durchgangshtml:
<script>
var user = "<computed value auf @username>"
</script>
und diese einbetten oder per <script src=...> laden
Gruß
Roland
Gruß
Roland
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln