2011-01-05 4 views
1

Ich habe eine asp.net Web-Anwendung, in der ich mehrere wir Dienste verwenden, um mehrere Ajax-Anfragen zu bedienen. Das Problem ist, wie man bestimmt, ob der entsprechende Anruf die Seite kommt, die ich gedient habe. Ich verwende Formularauthentifizierung in meinen Seiten. Gibt es irgendeine Weise, in der ich den Benutzer autorisieren kann, der den webservice durch die gleiche Formenauthentifizierung anruft.Wie kann festgestellt werden, ob der Webservice-Aufruf von der autorisierten Formularseite kommt?

+0

Fixed ..: - D er er .. –

Antwort

1

Große Frage, kein Zweifel!

Das erinnert mich an eine old question I already answered to. Ihr Szenario ist anders, aber das Grundproblem bleibt gleich: Wenn Sie einen Web-Service von einem Webformular aus aufrufen, wie teilen Sie Authentifizierungsdaten mit dem Formular?

Es gibt keine einfache und naheliegende Lösung dafür. Sie können darüber nachdenken, WS-Security in den Webdienst zu implementieren, und sich das Web Form authentifizieren, nachdem Sie überprüft haben, ob der Benutzer autorisiert ist.

Der Web-Service wird keine Informationen zur Benutzeranmeldung freigeben, es sei denn, er wurde explizit als Parametermethode übergeben (z. B. void PerformAction(string userId, ...)), aber beachten Sie, dass sich in diesem Fall die Perspektive dramatisch ändert.

Dies ist die beste Idee, die mir in den Sinn kommt, aber denken Sie daran, dass Sie entweder Ihren Webdienst grundlegend umgestalten oder es nicht möglich sind, von Benutzern generierte Clients (dh Desktopanwendungen, die mit Ihrer WSDL kompiliert wurden) zu verwenden dein Dienst.

[Hinzufügen] jetzt, dass Sie Ihr Szenario ein wenig detailliertes, kommt in meinem Kommentar den spannendste Teil des Software-Engineering :)

Wie gesagt hier erklärt, haben Sie mehrere Möglichkeiten, zum Beispiel:

  1. Benutzernamen/Passwort im Seiten-Markup (in JavaScript-Variablen) speichern und von JQuery als Parameter für den Web-Service senden lassen. WS wird dann die Anfrage basierend auf diesen Daten authentifizieren. Unvorschriftsmäßig, denn wenn jemand auf den Benutzer-Cache zugreifen kann, wird das Passwort ausgenutzt (es gibt einfachere Mittel, jemandes Passwort auf einem freigegebenen/öffentlichen Computer zu stehlen, werde ich nicht diskutieren) und auch, wenn Sie planen, von einfachem HTTP zu HTTPS zu wechseln sichere Authentifizierung dann Sie müssen sichern Sie den Web-Service auch
  2. Lassen Web-Anwendung eine Authentifizierung generieren Token, die für den Web-Service gültig ist. Die Idee klingt wie folgt: Erstens, haben Sie ein gemeinsames Objekt zwischen Webapp und Web-Service (wie ein Objekt innerhalb Application Sammlung), oder, wenn Webapp und Web-Service auf verschiedenen Servern sind, verwenden Sie ein DBMS; Erstellen Sie dann für jede erfolgreiche Webapps-Authentifizierung ein eindeutiges Token (Sitzungs-ID kann in Ordnung sein), und speichern Sie es in einer JS-Variablen, die an den Web-Service übergeben wird. Wenn der Web-Service aufgerufen wird, prüfen Sie schließlich, ob das Token gültig ist (d. h.Benutzer authentifiziert und protokolliert noch mit Erlaubnis, dass Web-Dienst zuzugreifen, so dass sowohl die Authentifizierung und Autorisierung ), sonst

ablehnen Wenn andere Jungs Ideen haben, zögern Sie nicht zu helfen;)

+0

Ich rufe den Dienst über Skript (jQuery) Ich glaube nicht, dass die Authentifizierungsinformationen explizit mithilfe von Skript übergeben werden können. –

+0

Das scheint ein Problem zu sein ... Natürlich könnten Sie Ihren Benutzernamen/Ihr Passwort im Markup der Seite speichern und über JQuery senden, aber ich würde es nicht vorschlagen. Ein intelligenterer Ansatz besteht darin, ein * Token * zu verwenden. Bearbeiten und erklären wie. –

+0

Die Cookies werden jedoch wahrscheinlich übergeben. Wenn Sie die Formularauthentifizierung verwenden, erhalten Sie möglicherweise Informationen zum authentifizierten Benutzer (über das Formularauthentifizierungsticket). – volpav

0

Dies könnte helfen: Securing web-services created using ASP.NET

- Pavel

+0

Ich helfe zwar, aber das Dokument sagt, dass keine Formularauthentifizierung in Webservices möglich ist. –

+0

Ja, aber in Ihrem Fall scheint der Benutzer bereits beim Aufruf eines Web-Service authentifiziert zu sein, so dass Sie nur nach diesen Informationen suchen müssen. Vielleicht habe ich Ihre Frage etwas missverstanden - dieses Thema behandelt hauptsächlich die Fälle, in denen Sie eine Authentifizierung in den Web-Service selbst einbauen möchten. – volpav

0

Da Sie Foren Authentifizierung tun können Sie so etwas wie dies in Ihrem WebMethod tun

If Not HttpContext.Current.User.Identity.IsAuthenticated Then 
    Return Nothing 
End If 

Es könnte besser sein, eine Ausnahme zu werfen, wenn Sie allerdings einen GET tun, auf diese Weise das leere Ergebnis bekommen nicht zwischengespeichert die Client-Seite.

Verwandte Themen