在你App_Start\Startup.Auth.cs
文件,你應該有一些關於OnValidateIdentity
:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
Provider = new CookieAuthenticationProvider
{
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<Infrastructure.Identity.UserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentity: (manager, user) => manager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie))
},
// Other stuff
});
看到參數validateInterval
- 默認情況下它被設置爲30分鐘。這是Cookie實際上與數據庫中的值進行比較的頻率。
將值更改爲TimeSpan.FromSeconds(30)
。這將每30秒將cookie與數據庫中的值進行比較,如果租戶的身份無效 - 則會向用戶顯示登錄入口。
您也可以將其更改爲0,但我認爲這會超載您的數據庫 - 每次請求都會有一些調用數據庫。
也有一個屬性CookieDomain
財產上CookieauthenticationOptions
:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
// other stuff
CookieDomain = "example.com"
});
這可以幫助你,而是因爲這個項目在流水線這麼早配置可能很難在運行時重新配置。
另一種選擇是有多個cookie authenticaion中間件,但如果你的租戶數量是已知的,非常有限的,這隻會工作:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
// other stuff
AuthenticationType = "myTenant1",
CookieDomain = "t1.example.com"
});
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
// other stuff
AuthenticationType = "myTenant2",
CookieDomain = "t2.example.com"
});
但這可能會給你比它更頭疼的實際價值。
嗯,我想這將在30秒後將用戶重定向到正確的登錄頁面,這比沒有好,但仍然不是我期待的即時性。由於我的數據存儲是「遠程」,因此我想保留請求的數量。 因此,是不是有一種方法來查看授權cookie,比較域,如果它只是部分匹配,則返回未授權。我目前正在涉足一個自定義的CookieAuthenticationProvider,但我還沒有到那裏 - 我懷疑這可能會遇到同樣的侷限。 – user3566056
@ user3566056更新了我的答案 – trailmax