【发布时间】:2014-09-03 16:33:07
【问题描述】:
我现在真的很困惑如何在 ASP.NET MVC 5 中实现身份验证。这是我第一次使用 ASP.NET MVC,而且我已经习惯了桌面应用程序。有很多术语,如 OWASP、OAuth、FormsAuthenticationTicket 和其他我真的很难理解的术语。
我决定只是为初学者制作一个简单的登录页面。只需检查数据库中的用户名和密码,如果存在,则用户已通过身份验证。到目前为止,根据我所阅读的内容,我可以实现 IAuthenticationFilter。我已经像这样实现了 OnAuthentication:
public void OnAuthentication(AuthenticationContext context)
{
IIdentity ident = context.Principal.Identity;
if (!ident.IsAuthenticated || !ident.Name == "randy") // Name is just for testing
{
context.Result = new HttpUnauthorizedResult();
}
}
对于 OnAuthenticationChallenge,如果用户未通过身份验证(如果结果是 HttpUnauthorizedResult 并且用户未通过身份验证,则我只有代码重定向到 LogIn 操作方法。考虑一下,它与逻辑 OnAuthentication 相同,所以为什么我不能只是在那时和那里重定向。我将这些代码基于网络示例)。
在 LogIn 操作方法中,有一个 UserRepository 用于检查用户是否存在。但是如果用户存在,我不知道如何将它设置为上下文的主体。我不知道我这样做是否正确,所以请对此发表评论。
我想我的问题是:
我做的对吗?
如果用户未通过身份验证,为什么 Web 中的示例不直接在 OnAuthentication 中重定向。为什么要等待 OnAuthentication 执行?
如果我的操作是正确的,如何从 LogIn Action 方法设置 Principal?我该如何清除它?如果我理解正确,这是否与登录/注销(设置主体/清除主体)同义?
如果我所做的一切都是错误的,或者即使它是正确的,您能否指导我从哪里开始学习 ASP.NET MVC 的身份验证?当我搜索时,这些主题是针对某些东西的具体实现,它主要假设理解一些概念。我很难从哪里开始。
【问题讨论】:
标签: asp.net-mvc authentication authorization