2017-03-31 11 views
0

MVC5 WebApiを実行しているローカルサイトがあります。私はそこにデフォルトのAccountControllerを持っています.WebApiコントローラを持っています。私は[Authorize]属性でロックしていますので、私がしたいのは、最初にUWP経由でそれに接続することです。WebAPI Authorization

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

私はそのURLに投稿するポストマンを使用しようと、私は偽造防止トークンにエラーが発生します。

デフォルトのログインPOSTメソッドは次のようになります。ちょうど私がWeb Api 2の終わりとUWPの終わりの両方でそれを行うために必要なものが不思議です。 UWPの終わりで、私はXAMLのログインボタンのクリックでWindows.Web.Http.HttpClientを介してこれを設定しようとしています。郵便配達員で最初に接続を得るために何をする必要があるかをテストしていたので、まだコードはありません。偽造防止トークンをバイパスし、POSTメソッドでユーザー名とパスワードを取得するメソッドをAccountControllerに追加する必要がありますか、それとも推奨されませんか?

だから私のUWPだけで、ユーザー名とパスワードのテキストボックスを持って、私はあなたがテストするために郵便配達の要求に「RequestVerificationToken」ヘッダを追加する必要が

答えて

0

を経由して自分のWebサーバーに接続したいです。また、実際にテストのために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 –