2017-03-31 76 views
0

我有一个本地站点运行MVC5 WebApi 2.我有默认的AccountController那里,我有一个WebApi控制器我已经锁定了[Authorize]属性,所以我需要记录英寸我想要做的是通过UWP与授权第一连接到它。WebAPI授权

默认的登录POST方法是这样的:

// 
    // 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); 
     } 
    } 

如果我尝试使用邮差张贴到该网址我得到的防伪标记的错误。只是想知道我需要在Web Api 2端和UWP端做什么来实现它。在UWP端,我试图通过登录按钮上的Windows.Web.Http.HttpClient单击我的XAML来设置它。没有代码,因为我先在Postman中测试,看看我需要做些什么来获得连接。我是否需要在AccountController上添加一个绕过防伪标记的方法,并在POST方法上只接受用户名/密码,或者不建议这样做?

所以我UWP只是表示用户名和密码的文本框,我想通过

回答

0

您需要将“RequestVerificationToken”头添加到邮递员请求以测试连接到我的网络服务器。你还需要实现你自己的方式来真正从api获取令牌来进行测试。喜欢的东西:

[HttpPost] 
[AllowAnonymous] 
public IActionResult GetToken() 
{ 
    string cookieToken, formToken; 
    System.Web.Helpers.AntiForgery.GetTokens(null, out cookieToken, out formToken); 
    return this.Ok(cookieToken + ":" + formToken); 
} 

对于你的应用程序,你需要剃须刀@ Html.AntiForgeryToken()相当于添加到页面生成,并确保您在测试中添加标题一样的请求。

+0

这是一个很好的建议。这是我遇到的解决方案。我必须修复ApplicationOAuthProvider以接受我的凭证和client_id到API,这样我就可以直接点击/令牌,而无需通过控制器和Web耦合视图。不管是我构建Xamarin和UWP应用程序来连接我的站点,只有在客户端连接API时才有意义。 –

+0

这是一个导致答案的堆栈交换(在另一个问题中,当时这是一个复杂的问题): http://stackoverflow.com/questions/43175734/anti-forgery-token-web-api-2? noredirect = 1#comment73425968_43175734 –