asp.net-mvc - 使用 ASP.NET MVC 站点和 ServiceStack API 进行身份验证

标签 asp.net-mvc servicestack

我正在使用 ASP.NET MVC 和使用 ServiceStack 的 API 开发一个网站。

我很快就想添加身份验证。该网站将至少有两种类型的用户“服务提供者”和“服务消费者”,尽管用户可以具有多个角色。

我愿意使用新的 MVC 身份,但我希望我使用的任何内容都能很好地适用于 servicestack API 和 MVC“页面”,这些页面不一定使用 API,但应根据登录显示不同的内容。我不想需要 javascript 进行登录/注销。

我希望解决方案使用 token ,因为我没有在其他任何地方使用过 session 状态,但我对其他选项持开放态度,前提是它们可以在云提供商上水平扩展(用户下一个请求可能会转到不同的后台实例)结束)。

有人有理想解决方案的示例吗?

(注意:我对外部托管服务不感兴趣)。

最佳答案

ServiceStack 的身份验证也可以由外部 ASP.NET Web 框架使用,ServiceStack and MVC Integration docs向您展示如何 accept Login credentials from a MVC Controller and register them with ServiceStack :

public ActionResult Login(string userName, string password, string redirect=null)
{
    if (ModelState.IsValid)
    {
        try
        {
            using (var authService = ResolveService<AuthenticateService>())
            {
                var response = authService.Authenticate(new Authenticate {
                    provider = CredentialsAuthProvider.Name,
                    UserName = userName,
                    Password = password,
                    RememberMe = true,
                });

                // add ASP.NET auth cookie
                FormsAuthentication.SetAuthCookie(userName, true);

                return Redirect(string.IsNullOrEmpty(redirect) ? "/" : redirect);
            }
        }
        catch (Exception ex)
        {
            ModelState.AddModelError(string.Empty, ex.Message);
        }
    }

    return View("Index", GetViewModel());
}

http://mvc.servicestack.net现场演示展示了使用标准 MVC HTML 表单调用此 Controller 的示例。

然后,您的 MVC Controller 可以继承 ServiceStackController 来访问经过身份验证的用户 session 和不同的 ServiceStack 提供程序,以下是与 session 和身份验证相关的 API:

public class ServiceStackController : Controller
{
    //...
    ISession SessionBag { get; set; }
    bool IsAuthenticated { get; set; }
    IAuthSession GetSession(bool reload = true);
    TUserSession SessionAs<TUserSession>();
    void ClearSession();
}

启用 OAuth 提供程序

如果您需要,您也可以enable ServiceStack's different OAuth providers它可以选择直接回调到 ServiceStack 服务或

关于asp.net-mvc - 使用 ASP.NET MVC 站点和 ServiceStack API 进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27006845/

相关文章:

c# - 带有自定义 ResourceProvider 的 DataAnnotation

asp.net - ViewData、ViewBag 和 TempData 有什么区别?

redis - ServiceStack 的 Redis 客户端中的乐观锁定

routes - 向ServiceStack的基本路径添加参数

ajax - 如何在 mvc 的 ajax 操作链接中包含 AntiForgeryToken?

c# - 部分 View '/Views/Shared/... 未找到或没有 View 引擎支持搜索的位置

.net - 获取基本登录提示而不是重定向

c# - 如何使用 ServiceStack 客户端使用文件

c# - Redis IOException : "Existing connection forcibly closed by remote host" using ServiceStack C# client 错误

.NET MVC - 如何从另一个 Controller 获取 JsonResult?