0

asp.net IDを使用せずにWeb APIを認証できますか?Web API認証(asp.net IDなし)

私はMVCプロジェクトと同じソリューション内にMVCとWeb APIプロジェクトを持っています。私はログインとパスワードで保護された非常に小さなAdminエリアを持っています。このエリアでは、APIコールを使用してクリケット側のデータを取得します。

これは私のログイン機能である:

self.getUsers = function (callback) { 
    $.get("../MySite.API/Users/GetUsers/", callback); 
} 

public ActionResult SubmitLogin(string UserName, string Password) 
    { 
     if (ModelState.IsValid) 
     { 
      if (UserName == "xxxxx" && Password == "yyyyy") 
      { 
       FormsAuthentication.SetAuthCookie(UserName, true); 
       return RedirectToAction("Index", @"Admin/Users"); 
      } 
     } 
     var errors = (from value in ModelState.Values 
         from error in value.Errors 
         select error.ErrorMessage).ToList(); 

     if (errors.Count == 0) 
     { 
      errors.Add("UserName or Password are incorrect"); 
     } 

     ViewBag.Message = errors; 
     return View("Index"); 
    } 

ログインフォーム作業罰金、私の問題は私のAPIコントローラが[Authorize]で、API呼び出しを使用することですが、私は要求を行うとき、 401エラーが表示されます。

私は何とかAuthCookieを送信する必要があることを理解していますが、わかりません。

ご協力いただければ幸いです。

答えて

0

AuthorizationFilterまたはActionFilterは、アクションが実行される前にユーザーの認証と承認を確認することができます。

これはActionFilterでどのように実行できるかのサンプルです。必要に応じて自分でデザインすることができます:

public class CanEditReport : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     var reportID = Convert.ToInt32(filterContext.ActionParameters["id"]); 
     var report = ReportsManager.GetByID(reportID); 
     int userID = 0; 
     bool hasID = int.TryParse(filterContext.HttpContext.Session["CurrentUserID"].ToString(), out userID); 
     if (!hasID) 
     { 
      filterContext.Controller.TempData["FlashMessage"] = "Please select a valid User to access their reports."; 
      //Change the Result to point back to Home/Index 
      filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Home", action = "Index" })); 
     } 
     else //We have selected a valid user 
     { 
      if(report.UserID != userID) 
      { 
       filterContext.Controller.TempData["FlashMessage"] = "You cannot view Reports you have not created."; 
       //Change the Result to point back to Home/Index 
       filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Home", action = "Index" })); 
      } 
     } 
     base.OnActionExecuting(filterContext); 
    } 
} 
関連する問題