【发布时间】:2016-09-06 22:04:00
【问题描述】:
所以我有一个调用 WebApi 方法的 MVC 应用程序。
我对 MVC App 的授权是这样完成的
public class CustomAuthorizeAttribute : AuthorizeAttribute {
private RolesEnum _role;
public CustomAuthorizeAttribute() {
_role = RolesEnum.User;
}
public CustomAuthorizeAttribute(RolesEnum role) {
_role = role;
}
protected override bool AuthorizeCore(HttpContextBase httpContext) {
User currentUser = (User)httpContext.Session["CurrentUser"];
if (currentUser == null) {
return false;
}
if (currentUser.Role == RolesEnum.User && _role == RolesEnum.Admin) {
return false;
}
return true;
}
身份验证通过调用 WebApi 方法完成
[HttpPost]
public ActionResult Login(string username, string password)
{
User acc = new User();
acc.Username = username;
acc.Password = password;
acc = accBL.Login(acc);
if (acc != null) {
Session.Add("CurrentUser", acc);
return RedirectToAction("Index", "Project", null);
} else {
return View();
}
}
登录方式是这样的
public User LogIn(User acc) {
try {
HttpClient client = new HttpClient();
client.BaseAddress = new Uri(BASE_URL);
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = client.PostAsJsonAsync("api/Account/Login", acc).Result;
if (response.IsSuccessStatusCode) {
return response.Content.ReadAsAsync<User>().Result;
} else {
return null;
}
} catch {
return null;
}
}
WebApi 方法是这样的
[Route("api/Account/Login")]
[HttpPost]
public IHttpActionResult Login(User userModel) {
User user = db.Users.Where(p => p.Username == userModel.Username && p.Password == userModel.Password).FirstOrDefault();
if (user != null) {
return Ok(user);
} else {
throw new HttpResponseException(HttpStatusCode.Unauthorized);
}
}
如何在 MVC 应用程序和 WebApi 服务之间建立连接。我的授权和身份验证适用于 MVC 部分,但我的 WebApi 服务可以在没有任何授权/身份验证的情况下调用。根据我的示例,如何保护我的 WebApi?我已经使用 MVC 和 WebApi 工作了大约 3 周,很多事情我也不是很清楚。
我是否应该在公共 IHttpActionResult Login(User userModel) 中创建一个 GUID 并在每次调用方法时检查它?如何将此 GUID 传递给 MVC 应用程序并从 MVC 传递给 WebApi?
【问题讨论】:
标签: c# asp.net-mvc authentication asp.net-web-api authorization