我有这个旧的MVC5应用程序,它以最简单的形式使用表单身份验证。 web.config中只存储了一个帐户,没有角色等。
<authentication mode="Forms">
<forms loginUrl="~/Login/Index" timeout="30">
<credentials passwordFormat="Clear">
<user name="some-user" password="some-password" />
</credentials>
</forms>
</authentication>
登录例程只需调用
FormsAuthentication.Authenticate(name, password);
就是这样。 在asp.net核心中是否有类似的(在简单性方面)?
答案 0 :(得分:23)
不是那么简单:)
在Startup.cs中,配置方法。
app.UseCookieAuthentication(options =>
{
options.AutomaticAuthenticate = true;
options.AutomaticChallenge = true;
options.LoginPath = "/Home/Login";
});
添加“授权”属性以保护您要保护的资源。
[Authorize]
public IActionResult Index()
{
return View();
}
在Home Controller,Login Post操作方法中,编写以下方法。
var username = Configuration["username"];
var password = Configuration["password"];
if (authUser.Username == username && authUser.Password == password)
{
var identity = new ClaimsIdentity(claims,
CookieAuthenticationDefaults.AuthenticationScheme);
HttpContext.Authentication.SignInAsync(
CookieAuthenticationDefaults.AuthenticationScheme,
new ClaimsPrincipal(identity));
return Redirect("~/Home/Index");
}
else
{
ModelState.AddModelError("","Login failed. Please check Username and/or password");
}
以下是供您参考的github回购:https://github.com/anuraj/CookieAuthMVCSample
答案 1 :(得分:13)
要添加到Anuraj的答案 - 已经弃用了许多类.Net Core 2.FYI:
Startup.cs - 在ConfigureServices中:
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(o => o.LoginPath = new PathString("/account/login"));
Startup.cs - 在配置中:
app.UseAuthentication();
在您的帐户/登录控制器方法/您进行身份验证的任何地方:
var claims = new[] { new Claim(ClaimTypes.Name, "MyUserNameOrID"),
new Claim(ClaimTypes.Role, "SomeRoleName") };
var identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
await context.SignInAsync(
CookieAuthenticationDefaults.AuthenticationScheme,
new ClaimsPrincipal(identity));
// Do your redirect here