Web API 中的 ASP.NET 標識
我正在開發一個使用新的 ASP.NET Identity 進行身份驗證的簡單應用程序。由於我計劃將來有一個移動應用程序,因此我將身份驗證放在了 Web API 中,我從 Razor 網頁(沒有 MVC 或表單)從 jQuery 發佈到該 API。到目前為止,post 工作正常並創建使用者並將他們登錄 - 在 API 端。
但是,我無法確定如何從那裡開始。我需要設置 IsAuthenticated 以便我可以提供正確的頁面,但它總是返回 false。由於 Identity 非常新,因此幾乎沒有可用的文件,而且我無法找到任何像從 Web API 執行它那樣複雜的東西。
問:登錄後從 Web API 中的身份驗證返回以正確
User.Identity.IsAuthenticated設置的正確方法是什麼?登錄.cshtml
@if (User.Identity.IsAuthenticated) { @RenderPage("/userpage.cshtml"); } else { <form id="loginForm"> <b>Login</b> <input type="email" placeholder="Email" name="email" id="loginEmail" /> <input type="password" placeholder="Password" name="password" id="loginPassword" /> <input type="submit" value="Log In"/> </form> } <script> $("#loginForm").submit(function(event) { event.preventDefault(); $.post("/api/login/", { Username: $('#loginEmail').val(), Password: $('#loginPassword').val() }, function () { //??? }, "json"); return false; }); </script>登錄 Web API
public class LoginController : ApiController { public async void Post(UserInfo info) { var manager = new AuthenticationIdentityManager(new IdentityStore()); var result = await manager.Authentication.CheckPasswordAndSignInAsync(HttpContext.Current.GetOwinContext().Authentication, info.Username, info.Password, true); if (result.Success) { //??? } } }
這取決於您使用的身份驗證方法。大多數 Web 應用程序使用表單 (Cookie) 身份驗證模組作為主要的身份驗證方法。它應該適用於您的網頁,但如果您想在本機客戶端(如移動應用程序)上使用您的 API,它不是最佳選擇。使用 web api 啟用 cookie 身份驗證時,您應該小心 CSRF 攻擊。
假設您使用 cookie 身份驗證,您仍然有兩個選擇。一個是 FormsAuthentication IIS 模組,它比較老,你應該使用FormsAuthentication.SetAuthCookie來登錄使用者。
另一種方式是OWIN cookie 中間件,它在預設的 MVC 5 模板中用於支持身份驗證。請查看我關於如何通過 OWIN API 登錄使用者的答案
如果您想通過移動應用程序為 Web API 提供更好的身份驗證故事,我建議您使用OWIN OAuth 中間件啟用不記名令牌作為 Web API 的主要身份驗證方法。在 MVC 5 SPA 模板中,它展示了將它們與 MVC 和 cookie auth 一起使用的良好模式。我的部落格了解 VS2013 RC 的 SPA 模板中的安全功能應該可以大致了解它們如何協同工作。
身份框架有一個OWIN 包,它實現了大部分 OWIN 身份驗證程式碼。所以你不需要實現你自己的。為什麼不使用它?