2017-04-03 73 views
6

我有我的网络API的网站,用来登录的默认实现了的AccountController:防伪令牌网络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); 
    } 
} 

这为网络工作正常,但如果我使用一个客户端像UWPXamarin这样的应用程序,如果我想要登录而不使用WebView,因为它看起来像Web Api耦合到网络,因为它依赖于在视图中生成的anti-forgery令牌,并在提交时重新发布。比方说,我希望客户端应用程序只使用文本框和提交按钮进行登录,就像我看到的大多数移动应用程序一样。他们通常不会弹出WebView

是唯一的解决方案来创建另一种方法登录用户没有防伪标记?这看起来有点混乱,并没有很好地遵循DRY原则,更不用说潜在的安全风险了。

+2

请登录页面的GET和抢令牌,然后做你的POST到登录页面,是一定要回送你得到了令牌。 –

回答