2012-11-20 5 views
5

Ich versuche, ServiceStack mit einer vorhandenen Web Forms-Website zu integrieren. Die Site verwendet die Formularauthentifizierung zusammen mit einer benutzerdefinierten Authentifizierungslogik, die Datenbankaufrufe usw. umfasst.Was ist der sauberste Weg, die Formularauthentifizierung von ServiceStack zu nutzen?

Wie kann ich ServiceStack-Aufrufe mit demselben Mechanismus sichern? Wenn ich die docs lese, sollte ich einen benutzerdefinierten Auth-Provider schreiben, der von CredentialsAuthProvider erbt, um die Datenbankprüfung usw. durchzuführen, und einen Anforderungsfilter hinzufügen, um die AuthenticateAttribute auf jede Anfrage anzuwenden. Muss ich auch das Authentifizierungsformular für Formulare festlegen, sobald es authentifiziert wurde, und das Ticket bei jeder Anfrage prüfen? Wo würde ich diese Dinge tun?

Fehle ich etwas? Gibt es einen besseren Ansatz?

Antwort

6

Ein Beispiel für die Integration der MVC-Formularauthentifizierung mit Auth Providern von ServiceStack finden Sie im Projekt UseCase CustomAuthenticationMvc.

Insbesondere die AccountController.Login() Methode zeigt, wie ServiceStack von MVC nennen:

[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

Meine Authentifizierungslogik kann mehrere Werte zurückgeben: „Benutzer nicht gefunden“, „gesperrt“ usw. Ist es möglich, dass die Verwendung von unterstützen ein 'CredentialAuthProvider'? – Daniel

+1

Es ist möglich, aber niemand hat dazu beigetragen, das noch zu tun :) – mythz