2014-06-22 65 views
2

當我通過安全標記激活OWIN註銷處處功能並使用OnValidateIdentity回叫CookieAuthenticationProviderSecurityStampValidator-類時,用戶每次關閉瀏覽器時都會註銷。OnValidateIdentity禁用MVC OWIN記住我選項

provider.OnValidateIdentity = 
    SecurityStampValidator.OnValidateIdentity<MyUserManager, MyUser>(
     System.TimeSpan.FromSeconds(10),(manager, user) => { 
      return user.GenerateUserIdentityAsync(manager);              
     }); 

然而,當我在OnValidateIdentity -callback水暖自己(查找和安全郵票的比較,拒絕或更新身份),一切似乎都正常工作。

這是一個已知的錯誤,或者我在這裏錯過什麼?或者是否有關於CookieAuthenticationProvider和使用OnValidateIdentity的良好文檔?
用谷歌挖掘只顯示我一些簡單的樣本,但沒有進一步的見解。

信息

  • 我使用自己的實現它保存在一個數據庫
  • 我注意到,每一個頁面請求調用兩次 GetSecurityStampAsync的UserStorage的所有 數據UserStorage的,當我使用我的 實現時,只有一個調用完成。
  • 安裝身份的版本是2.0.1

回答

0

我發現在SecurityStampValidator.OnValidateIdentity拆卸下面的代碼:

// .. some other code 
// ... 
ClaimsIdentity claimsIdentity = await regenerateIdentityCallback(userManager, tUser); 
if (claimsIdentity != null){ 
context.get_OwinContext().get_Authentication().SignIn(new ClaimsIdentity[] 
    { 
     claimsIdentity 
    }); 
} 

在我看來,那SignIn -operation是不完整的,要設記住我的選擇?因此我認爲SecurityStampValidator的實現是buggy。

+0

我的研究和調試顯示'Ispersistent'是作爲用戶身份的索賠添加的。 – OzBob

4

這基本上是一個bug,cookie的重新生成應該尊重cookie上當前的Remember Me選項。作爲一種變通方法,您可以複製OnValidateIdentity代碼和飼料在目前情況下性能通過流持久性模式:

context.OwinContext.Authentication.SignIn(context.Properties, identity);