我正在使用WebAPI/Owin 3.0實施簡單的登錄/密碼身份驗證。下面是我的配置方法:WebAPI/Owin - 身份登錄後未獲得授權
public void ConfigureAuth(IAppBuilder app) {
// Configure the db context and user manager to use a single instance per request
app.CreatePerOwinContext(ApplicationDbContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
app.UseCookieAuthentication(new CookieAuthenticationOptions() {
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/#sign-in")
});
}
這裏是登錄方法
[Authorize]
[RoutePrefix("api/Account")]
public class AccountController : ApiController {
[AllowAnonymous]
[Route("Login")]
public async Task<IHttpActionResult> Login(LoginBindingModel login) {
ApplicationUser user = await UserManager.FindAsync(login.Email, login.Password);
if(user != null) {
var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
Authentication.SignIn(new AuthenticationProperties() { IsPersistent = true }, identity);
return Ok("OK");
}
return BadRequest("Invalid email or password");
}
}
我可以看到身份驗證cookie從服務器端傳來後,我發送到登錄方法的請求。我還發現,在發送更多請求時,cookie會被髮送回服務器。但是,服務器返回401未經授權的響應。
我把一個斷點放入AuthorizeAttribute.IsAuthorized方法。原來, actionContext.ControllerContext.RequestContext.Principal.Identity.IsAuthenticated == false,因爲AuthenticationType爲null並且沒有聲明。 Login方法中的原始身份有4個聲明,其IsAuthenticated屬性爲true。
爲什麼身份失去了所有的聲明和AuthenticationType值?
我使用本地IISExpress服務器測試本地域名上運行的應用程序。
我在過去的某個時候意識到了這一點,但是這讓我困擾了2個小時,直到我發現這篇文章。 – hunter 2015-12-03 13:45:09