在没有身份的情况下使用 Owin
Using Owin without Idenity
我有一个 asp mvc 应用程序,它需要非常低级别的身份验证和登录功能。用户有一个唯一的 7 位数字,他们将在其中输入以登录应用程序。一旦通过身份验证,他们就能够编辑 EF 数据库。就是这样!
目前我正在使用 Owin 的基本实现来验证和登录用户。基本上我有一个输入字段,用户可以在其中输入他们的号码,然后我使用 EF 查找它,如果我找到该号码,我会创建一个声明并让他们登录。
我对此很陌生,我没有看到使用 Asp 身份系统的好处,因为我不需要外部登录功能或注册功能。此外,我没有用户配置文件。我只需要一种方法来检查这些数字以识别用户在数据库中,然后让他们登录。所以问题是:我的 Owin 实现是否有效?为什么我在这里需要 asp 身份框架?
[HttpPost, AllowAnonymous, ValidateInput(true)]
public ActionResult Index(employeePSDB lookUpEmployeeID)
{
if (ModelState.IsValid)
{
using (var db = new PsEntities())
{
IEnumerable<employeePSDB> foundEmployeeInDb = db.employeePSDBs.Where(foundEmployee => lookUpEmployeeID.EmployeeNumber == foundEmployee.EmployeeNumber);
if (foundEmployeeInDb.Count() > 0)
{
var identity = new ClaimsIdentity(new[] {
new Claim(ClaimTypes.Name, foundEmployeeInDb.First().EmployeeNumber.ToString())
}, "ApplicationCookie");
var contex = Request.GetOwinContext();
var authManager = contex.Authentication;
authManager.SignIn(identity);
return Redirect(GetRedirectUrl(lookUpEmployeeID.ReturnUrl));
}
}
}
//user authN failed or ModelState is not valid
ModelState.AddModelError("", "Not in db");
employeePSDB newLookUp = new employeePSDB
{
ReturnUrl = lookUpEmployeeID.ReturnUrl
};
return View(newLookUp);
}
我绝不是专家,也许有人可以对此进行更多扩展,但您的实施是基于有效 cookie 的身份验证。 Asp 身份框架或系统只是为了帮助构建和维护您的模型。使用您自己的 Entity Framework 模型就可以了。请参阅以下链接以进行进一步研究...
http://www.khalidabuhakmeh.com/asp-net-mvc-5-authentication-breakdown
http://www.khalidabuhakmeh.com/asp-net-mvc-5-authentication-breakdown-part-deux
并消除任何混淆:
http://brockallen.com/2012/06/04/membership-is-not-the-same-as-forms-authentication/
我有一个 asp mvc 应用程序,它需要非常低级别的身份验证和登录功能。用户有一个唯一的 7 位数字,他们将在其中输入以登录应用程序。一旦通过身份验证,他们就能够编辑 EF 数据库。就是这样!
目前我正在使用 Owin 的基本实现来验证和登录用户。基本上我有一个输入字段,用户可以在其中输入他们的号码,然后我使用 EF 查找它,如果我找到该号码,我会创建一个声明并让他们登录。
我对此很陌生,我没有看到使用 Asp 身份系统的好处,因为我不需要外部登录功能或注册功能。此外,我没有用户配置文件。我只需要一种方法来检查这些数字以识别用户在数据库中,然后让他们登录。所以问题是:我的 Owin 实现是否有效?为什么我在这里需要 asp 身份框架?
[HttpPost, AllowAnonymous, ValidateInput(true)]
public ActionResult Index(employeePSDB lookUpEmployeeID)
{
if (ModelState.IsValid)
{
using (var db = new PsEntities())
{
IEnumerable<employeePSDB> foundEmployeeInDb = db.employeePSDBs.Where(foundEmployee => lookUpEmployeeID.EmployeeNumber == foundEmployee.EmployeeNumber);
if (foundEmployeeInDb.Count() > 0)
{
var identity = new ClaimsIdentity(new[] {
new Claim(ClaimTypes.Name, foundEmployeeInDb.First().EmployeeNumber.ToString())
}, "ApplicationCookie");
var contex = Request.GetOwinContext();
var authManager = contex.Authentication;
authManager.SignIn(identity);
return Redirect(GetRedirectUrl(lookUpEmployeeID.ReturnUrl));
}
}
}
//user authN failed or ModelState is not valid
ModelState.AddModelError("", "Not in db");
employeePSDB newLookUp = new employeePSDB
{
ReturnUrl = lookUpEmployeeID.ReturnUrl
};
return View(newLookUp);
}
我绝不是专家,也许有人可以对此进行更多扩展,但您的实施是基于有效 cookie 的身份验证。 Asp 身份框架或系统只是为了帮助构建和维护您的模型。使用您自己的 Entity Framework 模型就可以了。请参阅以下链接以进行进一步研究...
http://www.khalidabuhakmeh.com/asp-net-mvc-5-authentication-breakdown http://www.khalidabuhakmeh.com/asp-net-mvc-5-authentication-breakdown-part-deux
并消除任何混淆: http://brockallen.com/2012/06/04/membership-is-not-the-same-as-forms-authentication/