2017-03-31 106 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 –