2012-11-20 13 views
5

Sto cercando di integrare ServiceStack con un sito Web Form esistente. Il sito utilizza l'Autenticazione moduli insieme ad alcune logiche di autenticazione personalizzate che coinvolgono chiamate di database, ecc.Qual è il modo più semplice per sfruttare l'autenticazione basata su moduli da ServiceStack?

Come posso proteggere le chiamate di ServiceStack utilizzando lo stesso meccanismo? Leggendo lo docs, sembra che dovrei scrivere un provider di autenticazione personalizzato che erediti da CredentialsAuthProvider per eseguire il controllo del database, ecc. E aggiungere un filtro di richiesta per applicare lo AuthenticateAttribute a ciascuna richiesta. Devo anche impostare il ticket di autenticazione dei moduli, una volta autenticato, e controllare il ticket su ogni richiesta? Dove potrei fare quelle cose?

Mi manca qualcosa? C'è un approccio migliore?

risposta

6

Vedere il progetto UseCase CustomAuthenticationMvc per un esempio di integrazione dell'autenticazione moduli MVC con i provider di autenticazione di ServiceStack.

In particolare il metodo AccountController.Login() mostra come chiamare ServiceStack da MVC:

[HttpPost] 
[AllowAnonymous] 
[ValidateAntiForgeryToken] 
public ActionResult Login(LoginModel model, string returnUrl) 
{ 
    if (ModelState.IsValid) 
    { 
     var authService = AppHostBase.Instance.TryResolve<AuthService>(); 
     authService.RequestContext = CreateRequestContext(); 
     var response = authService.Authenticate(new Auth 
     { 
      UserName = model.UserName, 
      Password = model.Password, 
      RememberMe = model.RememberMe 
     }); 

     // add ASP.NET auth cookie 
     FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe); 

     return RedirectToLocal(returnUrl); 
    } 

    // If we got this far, something failed, redisplay form 
    ModelState.AddModelError("", 
     "The user name or password provided is incorrect."); 
    return View(model); 
} 
+0

La mia logica di autenticazione può restituire più valori: "Utente non trovato", "bloccato", ecc è possibile sostenere che l'uso un 'CredentialAuthProvider'? – Daniel

+1

È possibile, ma nessuno ha contribuito a farlo ancora :) – mythz

Problemi correlati