2012-11-20 16 views
5

ServiceStack'ı varolan bir Web Formları sitesiyle bütünleştirmeye çalışıyorum. Site, veritabanı çağrılarını içeren bazı özel kimlik doğrulama mantığı ile birlikte Form Kimlik Doğrulaması kullanır.ServiceStack'ten Form Kimlik Doğrulaması'ndan yararlanmanın en temiz yolu nedir?

Aynı mekanizmayı kullanarak ServiceStack çağrılarını nasıl güvenli hale getirebilirim? docs'u okurken, veritabanı denetimi yapmak için CredentialsAuthProvider'dan gelen özel bir kimlik doğrulama sağlayıcısı yazmalı ve her istek için AuthenticateAttribute'u uygulamak için bir istek filtresi ekleyin. Ayrıca, kimlik doğrulaması yapıldıktan sonra formlar auth bileti ayarlamalı mıyım ve her talepte bulunan bileti kontrol etmeli miyim? Bu şeyleri nerede yapardım?

Hiçbir şey eksik miyim? Daha iyi bir yaklaşım var mı?

cevap

6

ServiceStack'ın Kimlik Doğrulama Sağlayıcıları ile MVC Form Kimlik Doğrulaması'nın bir örneği için CustomAuthenticationMvc UseCase projesine bakın. vb "kilitli" "kullanıcı bulunamadı" o kullanarak o desteklemek mümkün mü:

[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

Benim kimlik doğrulama mantığı birden fazla değer döndürebilir:

Özellikle AccountController.Login() yöntem MVC gelen ServiceStack çağırmak nasıl gösterir bir "Kimlik BilgisiAyrıcıProvider"? – Daniel

+1

Bu mümkün, ancak henüz bunu yapmaya kimse destek vermedi :) – mythz

İlgili konular