2017-04-03 26 views
6

私はログインのデフォルトの実装を使用して、私のWeb 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); 
    } 
} 

これは、ウェブのため正常に動作しますが、私は、クライアントを使用している場合appのようにUWPまたはXamarinのようになりましたWebViewを使用せずにログインしたい場合はWeb Apiがウェブに結合されているように見えるので、これは問題になります。anti-forgeryトークンがビューで生成され、私が見ているモバイルアプリのように、クライアントアプリケーションが単にテキストボックスとログインボタンを使用するようにしたいとしましょう。彼らは通常、WebViewをポップアップしません。

偽造防止トークンなしでユーザーにログインする別の方法を作成する唯一の方法はありますか?それは潜在的なセキュリティリスクはもちろんのこと、ちょっと乱雑でDRY原則にはうまくいかないようです。

+2

は、ログインページのGETを行うと、トークンをつかむし、ログインページにあなたのPOSTを行う、あなたが得たトークンを返送してくださいています。 –

答えて

1

これの答えは、/トークンエンドポイントにPOSTを行い、クライアントアクセスを可能にするためにApplicationOAuthProviderを上書きすることによって、偽造防止トークンを完全に回避することでした。詳細については、このstackexchangeを参照してください。

WebAPI [Authorize] returning error when logged in

関連する問題