web-dev-qa-db-ja.com

Asp.Net Core-最も単純なフォーム認証

私は、この最も簡単な形式でフォーム認証を使用する古いMVC5アプリケーションを持っています。 web.configに保存されているアカウントは1つだけで、ロールなどはありません。

<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コアに似たようなものがありますか?

25
Pelle

それはそれほど単純ではありません:)

  1. Startup.csで、メソッドを構成します。

    app.UseCookieAuthentication(options =>
    {
      options.AutomaticAuthenticate = true;
      options.AutomaticChallenge = true;
      options.LoginPath = "/Home/Login";
    });
    
  2. 保護するリソースを保護するために、Authorize属性を追加します。

    [Authorize]
    public IActionResult Index()
    {
      return View();
    }
    
  3. 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

27
Anuraj

Anurajの答えに追加するために、多くのクラスが.Net Core 2で非推奨になりました。参考までに:

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

ソース: https://github.com/aspnet/Announcements/issues/232

https://github.com/aspnet/Security/issues/131

17
AndyP9