2012-11-20 24 views
5

Próbuję zintegrować ServiceStack z istniejącą witryną Web Forms. Witryna korzysta z uwierzytelniania za pomocą formularzy wraz z pewną niestandardową logiką uwierzytelniającą obejmującą wywołania bazy danych itp.Jaki jest najczystszy sposób na wykorzystanie uwierzytelniania formularzy z ServiceStack?

Jak mogę zabezpieczyć połączenia ServiceStack przy użyciu tego samego mechanizmu? Po przeczytaniu docs, wydaje mi się, że powinienem napisać niestandardowego dostawcę uwierzytelniającego, który dziedziczy po CredentialsAuthProvider, aby wykonać sprawdzenie bazy danych itp. I dodać filtr żądania, aby zastosować AuthenticateAttribute do każdego żądania. Czy muszę również ustawić bilet autoryzacji formularzy po uwierzytelnieniu i sprawdzić bilet przy każdym żądaniu? Gdzie mam robić te rzeczy?

Czy brakuje mi czegoś? Czy istnieje lepsze podejście?

Odpowiedz

6

Zobacz projekt CustomAuthenticationMvc UseCase na przykładzie integracji uwierzytelniania formularzy MVC z dostawcami uwierzytelniania ServiceStack.

szczególności metoda AccountController.Login() pokazuje jak zadzwonić ServiceStack z 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

Moja logika uwierzytelniania może zwracać wiele wartości: „Nie znaleziono użytkownika”, „zablokowany”, itd. Czy to możliwe, że w celu wspierania korzystania "CredentialAuthProvider"? – Daniel

+1

Jest to możliwe, ale nikt nie wsparł tego jeszcze :) – mythz

Powiązane problemy