我正在使用 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/