Laden...

AJAX JQuery Zugriff auf HttpContext.Current.User.Identity.Name im Javascript ?

Erstellt von liberado vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.371 Views
L
liberado Themenstarter:in
273 Beiträge seit 2006
vor 13 Jahren
AJAX JQuery Zugriff auf HttpContext.Current.User.Identity.Name im Javascript ?

Hallo Leute,
ich bin neu in der Webentwicklung, habe bissher nur Backendsysteme entwickelt. Zur Zeit beschäftige ich mich ziemlich viel mit ASP.NEt 4.

Ich habe bis jetzt eine Seite erstellt in der ich Forms-authentication verwende. Ich habe dann nach dem Login im Codebehind zugriff auf HttpContext.Current.User.Identity.Name

Ich würde aber den User gerne bei auch bei jedem Jquery.Ajax-aufruf übergeben.

Beispiel

$("#Greetme").click(function (e) {
                e.preventDefault();

                $.ajax({
                    type: "POST",
                    url: "http://localhost/HelloWorld/HelloWorld.asmx/Greetme",
                    data: "{Name: ' Manuel '}",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (msg) {
                        $("#ResultId").html(msg.d);
                    }

anstatt Manuel sollte hier der User aus dem context stehen. Wie macht man das ?
Hab leider bissher noch nicht allzuviel erfahrung was ASP und Ajax bzw javascript anbelangt.
Oder bin ich hier sowieso total falsch dran ? Ich will ein System entwickeln das verschiedene Daten für verschiedene User verwaltet. Bzw ein CMS 😉

Danke schonmal für eure Antworten

Gruß Manuel

16.834 Beiträge seit 2008
vor 13 Jahren

Hi,

Oder bin ich hier sowieso total falsch dran ?

ja, denn das ist ein völlig falscher Security-Ansatz.
Die sichere Methode ist, dass Deine Anwendung den derzeitigen User eben über den HttpContext ausliest und nicht per Ajax übergeben. Das ist die absolut einfachste Möglichkeit an Rechte Fremder zu gelangen. Absolutes No-Go.

Gruß

L
liberado Themenstarter:in
273 Beiträge seit 2006
vor 13 Jahren

Ok danke, und wie erstelle ich dann sichere Ajax-Aufrufe ?

16.834 Beiträge seit 2008
vor 13 Jahren

Am Ajax-Aufruf selbst änderst Du nichts.
Du prüfst in der Anwendungslogik (bei MVC im Controller / bei Classic ASP im Codebehind?), ob der User die nötigen Rechte hat und gibst je nachdem Dein Ergebnis zurück.

Wie Du anschließen die Auswertung machst musst Du wissen. Es gibt verschiedene Möglichkeiten:
* HTTP Status Code zurückgeben
* HTML Code als Result zurück geben
* ...

Gruß

L
liberado Themenstarter:in
273 Beiträge seit 2006
vor 13 Jahren

Ich verstehe leider nicht was du meinst. Der User sieht die Seite doch garnicht wenn er nicht angemeldet ist. Ich brauche im WCF Service ein Flag das den User identifiziert. Mir eigentlich gleich wie das da hin kommt 😃

Gruß

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo,

nach der Anmeldung kennt der Server doch den Benutzer schon und Du hast ja selbst geschrieben, daß Du über HttpContext.Current.User.Identity.Name Zugriff hast.

Warum willst Du diese Information immer wieder übertragen, wenn der Benutzer bereits authentifiziert ist? Ich verstehe das Problem nicht wirklich. Vielleicht fehlt Dir noch sowas wie[WebMethod(EnableSession=true)]in Deinen Webservice-Methoden.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

L
liberado Themenstarter:in
273 Beiträge seit 2006
vor 13 Jahren

Ich habe einen WCF - Dienst der auf einem anderen Server bereit steht. Dort kenn ich den Benutzer noch nicht

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo,

das ist natürlich was anderes 🤔

Um in diesem Fall etwas Sicherheit zu erhalten, ist es IMHO zwingend erforderlich, daß entweder der Benutzer sich am zweiten Server zusätzlich anmeldet, oder beide Anwendungen (ASP.NET und WCF) direkt miteinander kommunizieren.

Denkbar wäre zum Beispiel folgendes (nur so als Idee):

Die ASP.NET-Anwedung überträgt bei Benutzeranmeldung die dort benötigten Benutzerinformationen an den WCF-Service. Dieser könnte dann eine Guid zurückgeben, die Du als Sitzungkennung benutzt und in der ASP.NET-Session sowie im WCF-Service (zusammen mit den Benutzerinformationen) hinterlegst.
Diese Kennung benutzt Du dann im Ajax-Request.
Wenn die Sitzung auf der ASP.NET-Seite endet, informierst Du wieder den WCF-Dienst und verwirfst die Guid und sie zugehörigen Benutzerinformationen.

Wenn beide Anwendungen Zugriff auf eine gemeinsame Benutzerdatenbank haben, könntest Du auch direkt im Benutzerdatensatz eine Guid hinterlegen, solange der Benutzer angemeldet ist, und dann genauso verfahren, nur daß die Kommunikation zwischen beiden Anwendungen dann entfallen könnte.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

L
liberado Themenstarter:in
273 Beiträge seit 2006
vor 13 Jahren

Ich habe folgende Seite gefunden
http://www.dotnetspider.com/resources/34519-WCF-Forms-authentication.aspx

weis aber nicht genau inwiefern diese Seite mir weiterhilft!

L
liberado Themenstarter:in
273 Beiträge seit 2006
vor 13 Jahren

Hallo,
also ich hab bis dato keine anständige Möglichkeit gefunden.
Weis der Geier wie das richtig funktioniert. Ich versuchs jetzt über die GuiId wie du oben geschrieben hast. Aber wie ruf ich dann über javascript die SessionVariablen ab ?
Das funktioniert doch auch nicht oder ?
Gruß Manuel

16.834 Beiträge seit 2008
vor 13 Jahren

Hallo liberado,

ich hab grad mal ein bisschen nach share asp session with wcf gegoogelt und habe doch einige nette Beispiele gesehen.
Allem Anschein nach ist

 [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 

der Schritt in die richtige Richtung.

Using ASP.NET Sessions from WCF sollte dich weiter bringen denke ich.

Ich halte nichts davon, dass Session-/Authentifizierungs-Relevante informationen über Javascript quer durch die Gegend gesendet werden!

Gruß

L
liberado Themenstarter:in
273 Beiträge seit 2006
vor 13 Jahren

Ja auf das bin ich auch schon gestoßen. Das muss doch ganz normales Standartprocedere sein.Ich versteh einfach nicht wie andere sowas machen.

Hier muss man auf der Client-Seite mittels


using (new OperationContextScope((IContextChannel)proxy))
{
    Console.WriteLine(proxy.Greet("Hello"));
    HttpResponseMessageProperty responseProperty = OperationContext.Current.IncomingMessageProperties[HttpResponseMessageProperty.Name]
        as HttpResponseMessageProperty;
    helper = HttpSessionCookieHelper.Create((string)responseProperty.Headers[HttpResponseHeader.SetCookie]);
}

den Header setzen. Nur wie mache ich sowas mittels jquery ?
Ich glaub das geht einfach nicht 😦

16.834 Beiträge seit 2008
vor 13 Jahren

Hoffe das ist der letzte Edit nun!

Laut jQuery Dokumentation sendet jeder Ajax-Requests alle vorhandenen Cookie-/Session-Informationen mit.
Es wird also kein Problem durch den Ajax-Request geben.