5

Sto utilizzando il nuovo webapi.Tentativo di decodificare un ticket FormsAuthentication non è sempre in grado di convalidare i dati

Ora non so se lo sto facendo correttamente ma sto cercando di impostare la mia API per restituire un cookie di autenticazione all'interno dell'intestazione HttpResponseMessages da utilizzare su un'altra applicazione mvc.

Sto usando la FormsAuthenticationTicket come penso proprio quello che ho bisogno di usare come

public HttpResponseMessage Get(LoginModel model) 
    { 
     if (model.UserName == "bob") 
     { 
      // if (Membership.ValidateUser(model.UserName, model.Password)) 
      // { 
      var msg = new HttpResponseMessage(HttpStatusCode.OK); 
      var expires = DateTime.Now.AddMinutes(30); 
      var auth = new FormsAuthenticationTicket(1, model.UserName, DateTime.Now, expires, 
                model.RememberMe,"password", 
                FormsAuthentication.FormsCookiePath); 
      var cookie = new HttpCookie("user"); 
      cookie.Value = FormsAuthentication.Encrypt(auth); 
      cookie.Domain = "localhost"; 
      cookie.Expires = expires; 
      msg.Headers.Add("result",cookie.Value); 
      return msg; 
      // } 
     } 
     return new HttpResponseMessage(HttpStatusCode.Forbidden); 
     //else 
     //{ 
     // return "The user name or password provided is incorrect."; 
     //} 
    } 

ora nel mio controller di accesso alla mia domanda mvc io chiamo il servizio e ottenere il valore dei dati dall'intestazione ho impostato in il controller api.

string data = response.Headers["result"].ToString(); 
    FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(data); 

Ogni volta che provo l'esecuzione del FormsAuthentication.Decrypt Continuo a ricevere un errore

Impossibile convalidare i dati.

Suppongo sia dovuto a quando l'API crittografa i dati che utilizza un tipo di chiave di cui il sito Web non è a conoscenza. Ho ragione?

Qualcuno può dare una mano?

Grazie

+0

Quale id il valore di 'data' in questa riga' string data = response.Headers ["result"]. ToString(); '? – Aliostad

risposta

8

presumo la sua causa quando l'API crittografa i dati che utilizza una sorta di chiave che il sito web non conosce. Ho ragione?

FormsAuthentication.Encrypt e Decrypt metodi utilizzano lo machine key. Assicurati quindi di aver configurato la stessa chiave sia per l'applicazione Web API Web che per l'applicazione MVC ASP.NET.

Si potrebbe anche dare un'occhiata allo following article che illustra come utilizzare OAuth 2.0 con l'API Web.

+0

Qualche idea su come lanciare un errore tale da cancellare i miei cookie e reindirizzare l'utente a un controller dall'eccezione? I miei cookie persistono, quindi mi blocco in un ciclo di reindirizzamento. Questo si verifica quando aggiorno le mie chiavi. L'API Web restituisce 401 ma MVC reindirizza alla pagina di accesso e la richiesta della pagina di accesso invia di nuovo il cookie che genera la risposta non autorizzata. Bloccato in un circolo vizioso! – Shouvik