5

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

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

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

4

1 回答 1

6

有关将 MVC 表单身份验证与 ServiceStack 的身份验证提供程序集成的示例,请参阅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);
}
于 2012-11-20T17:40:21.567 回答