Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    WCF REST, autenticazione semplice da mobile

    Ciao a tutti,
    vi espongo la mia situazione:
    devo sviluppare un webservice REST (host IIS) che esponga una serie di metodi, alcuni dei quali necessitano un'autenticazione.

    Vorrei fare in modo che i client (dispositivi mobile) possano accedere dopo aver inserito login e password da UI. Pensavo fosse facile utilizzare i meccanismi automatici di ASP.NET (membership e role), ma dopo innumerevoli prove non ci sono riuscito.
    Ho la necessità di utilizzare un'autenticazione semplice, non avendo la possibilità di utilizzare SSL e/o certificati. Volevo utilizzare un semplice cookie, e se possibile utilizzare quello che fa già asp.net authentication.

    Qualcuno può darmi una mano?

  2. #2
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    Premessa: Non lo so. WCF è bello ma ha troppi scazzi per quanto concerne la configurazione. Generalmente in questi scenari uso WebClient + JavascriptSerializer/Deserializer che anche se rappresentano soluzioni piu spartane (e meno "enterprise") fanno bene il loro sporco lavoro. Nello specifico con WebClient una volta effettuata l'autenticazione con la chiamata POST acquisisci e salvi il relativo cookie (.ASPXATUTH) e lo aggiungi ogni volta alle chiamate dove è richiesta l'autenticazione.

    Tutto questo in wcf viene gestito automaticamente ma deve essere prima configurato nel web.config.

  3. #3
    Originariamente inviato da rsdpzed
    Tutto questo in wcf viene gestito automaticamente ma deve essere prima configurato nel web.config.


    ed è quello che non riesco a fare.

    Essendo servizi REST, i vari client fanno semplici chiamate http attaccando appunto il cookie, ma il problema che ho io sta sul server!!!!!!!!!!!
    Non riesco a configurare il WCF

  4. #4
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    Originariamente inviato da Gluck74
    ed è quello che non riesco a fare.

    Essendo servizi REST, i vari client fanno semplici chiamate http attaccando appunto il cookie, ma il problema che ho io sta sul server!!!!!!!!!!!
    Non riesco a configurare il WCF
    ciao,
    hai creato un servizio che scrive il cookie? a livello di configurazione non dovrebbe esserci nulla di particolare, il solito "<authentication mode="Forms">".
    come hai gestito il tutto?

    in pratica dovresti avere un servizio che scrive il cookie, questo ovviamente deve essere messo come eccezione nel config, se no ovviamente non può essere richiamato.

  5. #5
    Originariamente inviato da U235
    ciao,
    hai creato un servizio che scrive il cookie? a livello di configurazione non dovrebbe esserci nulla di particolare, il solito "<authentication mode="Forms">".
    come hai gestito il tutto?

    in pratica dovresti avere un servizio che scrive il cookie, questo ovviamente deve essere messo come eccezione nel config, se no ovviamente non può essere richiamato.


    eeeeehhhhhh?????

  6. #6
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    Originariamente inviato da Gluck74
    eeeeehhhhhh?????
    ciao

    un esempio molto minimale...

    codice:
    //creo un servizio che funge da login
        [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
        [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
        public class LoginService : ILoginService
        {
            //metodo da chiamare per ottenere il cookie
            public bool Login(string userName, string password)
            {
                bool returnValue = false;
                User user;
                //controllo se un utente esiste nella classe statica.
                //In realtà potrei anche andare a controllare tra gli utenti del db 
                //o tramite Membership.ValidateUser ecc.
                user = DB.Users.Where(one => one.UserName == userName).FirstOrDefault();
                if (user != null)
                {
                    returnValue = (user.Password == password);
                }
                if (returnValue)
                {
                    // creo il cookie
                    var ticket = new FormsAuthenticationTicket(
                            1,
                            userName,
                            DateTime.Now,
                            DateTime.Now.AddDays(1),
                            true,
                            user.UserID.ToString()
                        );
                    string encryptedTicket = FormsAuthentication.Encrypt(ticket);
                    var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
                    HttpContext.Current.Response.Cookies.Add(cookie);
    
                }
                return returnValue;
            }
        } 
    
        public class Person
        {
            public int ID { get; set; }
            public string FirstName { get; set; }
            public string LastName { get; set; }
        }
    
        public class User
        {
            public int UserID { get; set; }
            public string UserName { get; set; }
            public string Password { get; set; }
        } 
    
        //funge da DB
        public static class DB
        {
            public static List<Person> People { get; set; }
            public static List<User> Users { get; set; }
    
            static DB()
            {
                People = new List<Person>();
                People.Add(new Person() { ID = 0, FirstName = "Mario", LastName = "Rossi" });
                Users = new List<User>();
                Users.Add(new User() { Password = "1234", UserID = 0, UserName = "Mario.Rossi" });
            }
        }
    nel config :
    codice:
    <system.web>
    ....
    <authentication mode="Forms">
        </authentication>
        <authorization>
          <deny users="?"/>
        </authorization>
      </system.web>
    
      
      <location path="LoginService.svc">
        <system.web>
          <authorization>
            <allow users="?"/>
          </authorization>
        </system.web>
      </location>
    a questo punto il client, se ha utilizzato le credenziali giuste è in possesso del cookie per accedere a tutti i servizi dell'applicazione, nel caso il login sia errato dovrebbe essere reindirizzato alla pagina "login.aspx"

    spero di aver capito bene cosa ti serve


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.