PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Security Problem bei SOAP-Webservice und wsdl


djunix
01.10.2007, 11:12
Hallo zusammen,
ich habe momentan ein kleines Problem in Sachen Security.
Ich habe eine Anwendung die einen SOAP-Webservice bereitstellt und zwar über localhost:8089.
Des weiteren habe ich eine Flex-Anwendung die diesen Service nutzen soll.
Die Flex-Anwendung und die WSDL sind über localhost:8080 zu erreichen.

Mein Problem ist jetzt das wenn ich die Anwendung nicht über localhost sondern über meine ip aufrufe, bekomme ich direkt beim laden der Anwendung eine ErrorMessage die besagt das er die WSDL nicht laden kann. Wenn ich allerdings bei der Angabe der WSDL einen relativen Pfad verwende, bekomme ich erst eine Fehlermeldung wenn ich eine Funktion des Webservice aufrufe. Die WSDL wird also gefunden und kann geladen werden. Allerdings kann er keine Funktionen aufrufen. Er geht dann in den FaultHandler der Funktion und gibt die Meldung "Security Error accessing url" aus. Meine Frage ist jetzt wie ich das möglichst elegant löse, damit ich den Webservice unabhängig von der aufrufenden URL verwenden kann.
Habe schon gesehen das es da wohl was mit crossdomain.xml und so gibt aber das hat bei mir irgendwie nicht funktioniert oder ich hab das falsch gemacht.
Habe einfach eine crossdomain.xml in das Verzeichnis gepackt wo auch die swf liegt:

<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" to-ports="8089"/>
</cross-domain-policy>


Hoffe mal das mir da jemand weiter helfen kann...

mfg
daniel

Brunôt
01.10.2007, 13:15
Die Datei crossdomain.xml muss in das Root-Verzeichnis des Webservers, nicht in das SWF-Verzeichnis.

Alternativ kannst Du auch mit Security.loadPolicyFile(url) eine CrossDomain-Datei laden, bevor Du auf die WSDL zugreifst. In diesem Fall gilt aber auch, dass die WSDL parallel oder unterhalb des Policy-Datei liegt.

In unserer Anwendung kann optional zu jeder WSDL eine Policy konfiguriert werden, die vor Erstellung des WebService geladen wird.

quaint
01.10.2007, 13:16
servus,

die crossdomain.xml muss immer im root des servers liegen.

hups, da war wohl jemand schneller als ich... naja, auch gut

Frank
01.10.2007, 13:55
...zusätzliche Infos zum Thema crossdomain.xml:
http://www.crossdomainxml.org/

djunix
02.10.2007, 08:29
Hallo und erstmal danke für eure Antworten.
Vielleicht noch als kleine Ergänzung:
Ich nutze das CairngormFramework.
Dort habe ich jetzt in der init-Funktion des ServiceLocators den Aufruf
Security.loadPolicyFile("http://192.168.1.164:8080/crossdomain.xml");
gemacht.
Meine Anwendung rufe ich über:
http://192.168.1.164:8080/flex/flex.html
auf...

Meine crossdomain.xml sieht momentan wie folgt aus:

<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" to-ports="*"/>
</cross-domain-policy>


Leider funktioniert das ganze immer noch nicht...
Und ist die crossdomain.xml nicht eigentlich dafür da, damit ich Anwendungen von einer bestimmten domain den zugriff auf meine swf erlauben kann? Dabei will ich doch eigentlich von meiner Anwendung aus auf einen Service zugreifen der unter einer anderen Domain läuft (localhost:8089).
PS: die IP 164 ist die meines Rechners, also wenn ich hier von localhost und 164 schreibe ist der gleiche PC gemeint...

Brunôt
02.10.2007, 14:17
Wenn ich es richtig verstanden habe, muss Servername und Port der CrossDomain-Policy zum WebService-Aufruf passen.

Hast Du schon


Security.loadPolicyFile("http://192.168.1.164:8089/crossdomain.xml")


probiert?

Vielleicht steht in der WSDL eine Adressangabe? Zum Beispiel:


<soap:address location="http://localhost:8089/..."/>


Auch wenn ".164" und "localhost" denselben PC meint, so kann das für Flash/Flex-Security ein Problem sein...

Mir hat die Verwendung eines lokal installierten Proxies sehr geholfen, zum Beispiel "Charles", http://www.xk72.com/charles/download.php

Damit ist klar erkennbar, welche Requests abgesetzt werden.

derCarsten
14.10.2008, 17:51
Moin zusammen.

Ich weiß nicht ob es an der Stelle hilft, aber ich hatte eigentlich ein ähnliches Problem, der Zugriff auf einen Webservice (gehostet auf einem anderen Server) funktionierte nicht mehr, es wurde ein FaultEvent geschmissen, mit:
[FaultEvent fault=[RPC Fault faultString="Security error accessing url" ... ]]

Dieser Eintrag in der crossdomain.xml hat zumindest bei mir das Problem gelöst (es kam auf das Attribut "headers" an):

<allow-http-request-headers-from domain="*" headers="SOAPAction" />

Grüße,
derCarsten