2015年11月7日土曜日

ASP.NET MVC Identityによるカスタムログイン

usernamagerを使えば楽なのだが
ユーザー管理は基幹システムで管理するので
Webサービス経由でログイン情報を取得する。

他のサンプルを見ても、usermanager経由だったので、ClaimsIdentityを生成する方法が
分からんので、単純にセッション変数を使ってログインを使用かな~と思ったが
何とかサンプルが有ったので、記述しておく。

AccountControllerを以下のように修正

using Microsoft.AspNet.Identity;  
using Microsoft.Owin.Security;  
using System.Security.Claims;  
using System.Web;  
using System.Web.Mvc;

namespace Mvc5AuthSample.Controllers  
{
    public class AccountController : Controller
    {
      public ActionResult Login()
      {
        return View();
      }

      [HttpPost]
      public ActionResult Login(string username, string password)
      {
        if (username == "alice" && password == "supersecret")
        {
           HttpContext.GetOwinContext().Authentication
             .SignOut(DefaultAuthenticationTypes.ExternalCookie);

           Claim claim1 = new Claim(ClaimTypes.Name, username);
           Claim[] claims = new Claim[] { claim1 };
           ClaimsIdentity claimsIdentity = 
             new ClaimsIdentity(claims,
               DefaultAuthenticationTypes.ApplicationCookie);

           HttpContext.GetOwinContext().Authentication
            .SignIn(new AuthenticationProperties() 
              { IsPersistent = false }, claimsIdentity);

           return Redirect("/Home");
        }
        else
        {
           ModelState.AddModelError("", 
            "Invalid username or password.");
        }

        return View();
      }
    }
}


元ネタ
http://aspnetguru.com/adding-authentication-to-asp-net-mvc-5/



0 件のコメント:

コメントを投稿