从ServiceStack利用Forms身份验证的最简洁方法是什么?

时间:2012-11-20 17:17:16

标签: authentication forms-authentication servicestack

我正在尝试将ServiceStack与现有的Web窗体站点集成。该站点使用表单身份验证以及一些涉及数据库调用等的自定义身份验证逻辑。

如何使用相同的机制保护ServiceStack调用?阅读docs,似乎我应该编写一个继承自CredentialsAuthProvider的自定义身份验证提供程序来执行数据库检查等,并添加请求筛选器以将AuthenticateAttribute应用于每个请求。我是否还需要设置表单身份验证票证,一旦经过身份验证,并检查每个请求的票证?我会在哪里做这些事情?

我错过了什么吗?有更好的方法吗?

1 个答案:

答案 0 :(得分:6)

有关将MVC Forms身份验证与ServiceStack的Auth Providers集成的示例,请参阅CustomAuthenticationMvc UseCase项目。

具体来说,AccountController.Login()方法显示了如何从MVC调用ServiceStack:

[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);
}