Web API 身份验证(无 asp.net 身份)
Posted
技术标签:
【中文标题】Web API 身份验证(无 asp.net 身份)【英文标题】:Web API Authentication (without asp.net identity) 【发布时间】:2017-10-22 22:31:00 【问题描述】:是否可以在不使用 asp.net 身份的情况下对 Web API 进行身份验证?
我在同一个解决方案中有一个 MVC 和一个 Web API 项目,在 MVC 项目上,我有一个很小的管理区域,受登录名和密码保护(仅适用于一个用户)。在这个区域,我使用 API 调用获取 clinet 端的数据。
这是我的登录功能:
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 调用,我的 API 控制器是 [Authorize]
但是当我发出请求时:
self.getUsers = function (callback)
$.get("../MySite.API/Users/GetUsers/", callback);
我收到 401 错误。
我知道我必须以某种方式发送AuthCookie
,但我不确定如何发送。
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:您可以制作自己的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);
【讨论】:
以上是关于Web API 身份验证(无 asp.net 身份)的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Web API 2:如何使用外部身份验证服务登录?