Tôi có một AccountController cho trang web của Api web của tôi có sử dụng các cài đặt mặc định cho lần đăng nhập:Chống giả mạo Mã Web Api 2
// POST: /Account/Login
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (!ModelState.IsValid)
{
return View(model);
}
// This doesn't count login failures towards account lockout
// To enable password failures to trigger account lockout, change to shouldLockout: true
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
switch (result)
{
case SignInStatus.Success:
return RedirectToLocal(returnUrl);
case SignInStatus.LockedOut:
return View("Lockout");
case SignInStatus.RequiresVerification:
return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
case SignInStatus.Failure:
default:
ModelState.AddModelError("", "Invalid login attempt.");
return View(model);
}
}
này hoạt động tốt cho các trang web, nhưng nếu tôi đang sử dụng một khách hàng ứng dụng như UWP
hoặc Xamarin
điều này trở thành vấn đề nếu tôi muốn đăng nhập mà không sử dụng WebView
vì có vẻ như Web Api
được kết hợp với web vì nó dựa trên mã thông báo anti-forgery
được tạo trong Chế độ xem và đăng lại khi gửi. Giả sử tôi muốn ứng dụng khách đó chỉ sử dụng hộp văn bản và nút gửi để đăng nhập giống như hầu hết các ứng dụng dành cho thiết bị di động tôi thấy. Chúng thường không bật lên một số WebView
.
Giải pháp duy nhất để tạo một phương pháp khác đăng nhập vào người dùng mà không có mã thông báo chống giả mạo? Điều đó có vẻ hơi lộn xộn và không tuân theo các nguyên tắc DRY rất tốt, chưa kể đến một nguy cơ bảo mật tiềm tàng.
Thực hiện GET của trang đăng nhập và lấy được dấu hiệu, sau đó làm POST của bạn đến trang đăng nhập, đang được bảo đảm để gửi lại các dấu hiệu bạn có. –