2012-04-14 6 views
1

Sorry für den eher zweideutigen Titel, aber ich entwickle eine Sencha Touch Mobile App und habe einen REST-basierten WCF-Web-Service gebaut, um die Daten zu liefern und zu finden die beste Möglichkeit, um Benutzeranmeldungen zu bearbeiten und ihre Sitzung in der App am Leben zu erhalten.Sencha Touch, JSONP, ASP.NET WCF REST und Benutzersitzungen

Jetzt, da ich JSONP für die Verbindung mit dem Webdienst verwenden muss, beschränkt dies die Optionen für die Authentifizierung und Sitzungsbehandlung. Ich könnte einfach die Anmeldeinformationen des Benutzers im lokalen Speicher in der App speichern und sie mit jedem Anruf an den Dienst übergeben, aber das kann nicht die beste Lösung sein. Einige haben erwähnt, dass die Anmeldeinformationen an eine Login-Methode im Web-Service übergeben werden und eine Session-ID zurückgegeben wird, die dann bei jedem weiteren Aufruf gesendet wird. Jedoch bin ich nicht sicher, wie man die Sitzung an erster Stelle unter Verwendung WCF herstellt und wie man sie am Leben hält, indem sie die passierte sessionid verwendet.

Kann jemand eine Technik empfehlen, um dieses zu erreichen?

Antwort

1

jsonp ist ein großartiger Trick, um Daten von einem ausländischen Dienst zu erhalten. Da Sie jedoch der Eigentümer des Webdienstes sind, können Sie der HTTP-Antwort den Header Access-Control-Allow-Origin: * hinzufügen und in den Ajax-Modus wechseln. Dann können Sie das Standardauthentifizierungsverfahren verwenden.

+0

Danke @FidoX, mir war nicht bewusst, dass Sie den Webservice für alle Domains öffnen können, die den Access-Control-Allow-Origin-Header verwenden. Dies ist jetzt an Ort und Stelle, so dass ich Kopfzeilen an den Web-Service mit normalen Ajax-Anfragen übergeben kann. Meine Frage steht immer noch über die beste Vorgehensweise für das Fortbestehen der Benutzersitzung. – markvpc

0

Wenn Ihr Webservice von anderen Entwicklern verwendet werden soll, werden die Zugangsdaten in der Client-Anwendung konfiguriert, so dass ich einen Authentifizierungsschlüssel (wie zum Beispiel google-maps api) verwenden und den Webservice statusfrei machen kann.

Wenn Sie sich gegen Benutzer/Ausweis authentifizieren müssen, ist die von Ihnen vorgeschlagene Lösung die gleiche wie die HTTP-Authentifizierung. Wenn Sie keinen Grund haben, sich neu zu implementieren, verwenden Sie die Standard-HTTP-Authentifizierung, falls in Ihrem Szenario verfügbar.

+0

Das Problem bei der Verwendung eines API-Schlüssels besteht darin, dass der Client in JavaScript integriert ist, sodass er nicht geheim ist. Jeder konnte in den Code schauen, den Schlüssel finden und ihn in seiner eigenen Anwendung verwenden. Für diese App muss der Benutzer eingeloggt sein, um es zu verwenden, so dass es kein allzu großes Problem ist. Leider scheint die Basisauthentifizierung nicht für REST-basierte WCF-Dienste zu funktionieren, die JSON zurückgeben (es sei denn, ich habe etwas übersehen), daher muss ich meine eigene Authentifizierung implementieren. Wahrscheinlich die Anmeldeinformationen des Benutzers überprüfen und eine zeitlich begrenzte Sitzungs-ID für alle weiteren Anrufe zurückgeben. Danke für deinen Rat. – markvpc

+0

Ok, dann glaube ich, dass der Benutzer pass pass genau auf Ihre Bedürfnisse passt. Muss keine BASIC-Authentifizierung sein, kann FORM-orientiert sein (mithilfe von Cookies) Wenn es in Ihrem Framework nicht funktioniert, sollten Sie untersuchen, warum. Ich habe WCF nie benutzt, aber es ist wirklich seltsam, dass Sie die Authentifizierung nicht in einem REST-Service verwenden können. – Israel