Laden...

HttpContext.Current.User nicht gewechselt im WPF Client

Erstellt von Rocket vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.679 Views
R
Rocket Themenstarter:in
240 Beiträge seit 2007
vor 13 Jahren
HttpContext.Current.User nicht gewechselt im WPF Client

Hi,

ich habe eine Silverlight Anwendung die per WCF Service auf den Membership Mechanismus für die Authentifizierung zugreift. Dies funktioniert einwandfrei.

Nun möchte ich einen WPF Client erstellen, die den selben Service benutzt.
Hier ist aber das Problem das bei FormsAuthentication.SetAuthCookie der HttpContext.Current.User nicht geändert wird.
Somit ist der User nicht authentifiziert...

Woran kann das liegen?

Hier der Code für die Login Methode:


        public bool Login(string email, string password, bool remember)
        {
            bool isLoggedIn = false;

            if (Membership.ValidateUser(email, password))
            {
                FormsAuthentication.SetAuthCookie(email, remember);
                isLoggedIn = true;
            }

            return isLoggedIn;
        }

        [PrincipalPermission(SecurityAction.Demand, Authenticated = true)]
        public bool ChangePassword(Guid appUserId, string oldPassword, string newPassword)
        {
            bool isChanged = false;

            MembershipUser user = Membership.GetUser(appUserId);
            if (user != null)
            {
                isChanged = user.ChangePassword(oldPassword, newPassword);
            }

            return isChanged;
        }

E
171 Beiträge seit 2004
vor 13 Jahren

Mhh versuch mal das:


FormsAuthentication.SetAuthCookie(email, remember);

                         FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, username,
                            DateTime.Now, DateTime.Now.AddMinutes(120), remember,
                            roleNames, FormsAuthentication.FormsCookieName);

                         string encryptedTicket = FormsAuthentication.Encrypt(ticket);

                         HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);

                         cookie.Domain = FormsAuthentication.CookieDomain;
                         cookie.Path = FormsAuthentication.FormsCookiePath;
                         cookie.Name = FormsAuthentication.FormsCookieName;

                         if (remember)
                             cookie.Expires = DateTime.MaxValue;

HttpContext.Current.Response.Cookies.Add(cookie);

.elron

R
Rocket Themenstarter:in
240 Beiträge seit 2007
vor 13 Jahren

Das funktioniert leider auch nicht.

E
171 Beiträge seit 2004
vor 13 Jahren

OK, lass dir mal das ticket geben,
und schau mal was drin steht per Breakpoint.


string formsCookiePath = FormsAuthentication.FormsCookieName;

            if (HttpContext.Current.Request.Cookies[formsCookiePath] != null)
            {
                FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(HttpContext.Current.Request.Cookies[formsCookiePath].Value);

             }

vergleiche die Zeiten , Expiration usw.

Kann auch sein das du kein ticket bekommst unter dem "formsCookiePath" namen.
Dann weisst du schon mal dass er überhaupt keins angelegt.

.elron

R
Rocket Themenstarter:in
240 Beiträge seit 2007
vor 13 Jahren

Also das Ticket wurde angelegt und ist ok!
Ich habe die Eigenschaften verglichen...

Kann evtl. was in der web.config nicht richtig eingestellt sein?

E
171 Beiträge seit 2004
vor 13 Jahren

Es sollte auf jedenfall auf Forms stehen.
<authentication mode="Forms"></authentication>

Evtl. schreibst du dir eine eigenes "AuthorisationHttpModule".

Aber bevor du das machst noch ne Frage.

Ist denn der "HttpContext.Current.User" bei der WPF Anwendung der lokaler pc benutzer ?

Warum ich frage, es kann sein das deine WPF Anwendung unter ntlm authentication läuft.

Schau dir auch mal die "Application.SetCookie();" ,"Application.GetCookie();" Methoden an.

Cookie WPF

.elron

R
Rocket Themenstarter:in
240 Beiträge seit 2007
vor 13 Jahren

Es sollte auf jedenfall auf Forms stehen.
<authentication mode="Forms"></authentication>

Das ist auf jeden Fall so.

Aber bevor du das machst noch ne Frage.

Ist denn der "HttpContext.Current.User" bei der WPF Anwendung der lokaler pc benutzer ?

Wenn ich die Webseite debugge ist der "HttpContext.Current.User" überhaupt nicht gesetzt, nachdem der Cookie erstellt wurde.

Warum ich frage, es kann sein das deine WPF Anwendung unter ntlm authentication läuft.

Wie könnte ich das denn rausfinden?

Schau dir auch mal die "Application.SetCookie();" ,"Application.GetCookie();" Methoden an.

Meinst du damit, dass ich nach der Validierung des Benutzers den Cookie von der WPF Anwendung aus setzen soll?

E
171 Beiträge seit 2004
vor 13 Jahren

Ok wenn der User nicht in WPF gesetzt ist dann solltest du das ganze direkt über deine WPF A. erstellen. Dazu schau dir den Link an.

Wenn bei der Anmeldung bzw. beim validieren "True" zurückkommt, einfach über deine WPF A. den Cookie setzten und gut.

Probiere das mal aus.
Ich geh mal stark davon aus das du nur Cookies verwenden kannst die auch über WPF erstellt worden sind.

.elron

R
Rocket Themenstarter:in
240 Beiträge seit 2007
vor 13 Jahren

Ich habe ein Cookie anhand des o.g. Beispiels erstellt und den Value und die Url der Webseite für das Setzen verwendet.

Leider funktioniert der Ansatz auch nicht.