我有一個IIS託管的MVC 5應用程序,它使用Asp.Net Identity和OWIN通過.AspNet.ApplicationCookie進行身份驗證。從其中的一個觀點來看,我通過SignalR JS客戶端調用自主託管的SignalR集線器(運行在同一臺服務器上)的長時間運行方法。這些電話都按預期工作。我現在想用[Authorize(Roles =「Administrator」)]來裝飾我的中心。這已證明存在問題。在集線器方法中設置斷點表明Context.User爲空,即使.AspNet.ApplicationCookie顯然位於Context.RequestCookies中。當從IIS託管的MVC應用程序調用時,Context.User在自託管的SignalR中心爲空
這裏是(在一個窗口服務自託管),用於在輪轂引導:
app.Map("/signalr", map =>
{
map.UseCors(CorsOptions.AllowAll);
map.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie
});
var hubConfiguration = new HubConfiguration();
map.RunSignalR(hubConfiguration);
});
下面是網絡應用程序在auth配置(在IIS託管):
// Configure the db context, user manager and signin manager to use a single instance per request
app.CreatePerOwinContext(UserAccountContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);
// Enable the application to use a cookie to store information for the signed in user
// and to use a cookie to temporarily store information about a user logging in with a third party login provider
// Configure the sign in cookie
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
Provider = new CookieAuthenticationProvider
{
// Enables the application to validate the security stamp when the user logs in.
// This is a security feature which is used when you change a password or add an external login to your account.
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
}
});
問題1:在上述場景中是否可以使用[Authorize]?如果是這樣,怎麼樣?
問題2:將自託管的集線器合併到IIS託管的應用程序會更好嗎?如果是這樣,IIS下長期運行的集線器方法是否存在問題?
更新1 我嘗試添加TicketDataFormat = new TicketDataFormat(new MachineKeyDataProtector("ASP.NET Identity"))
在我的樞紐配置的CookieAuthenticationOptions,但這並沒有幫助。當然,這似乎應該比現在更容易。
代碼將幫助我們幫助您。 SignalR集線器的引導是什麼樣的? –
託管在同一臺服務器上,但在同一個應用中?因爲我認爲默認情況下,Asp.net標識僅爲同一應用共享憑據,而不是服務器 –
@ bto.rdz,因此集線器作爲Windows服務自行託管,因此它不在與MVC 5相同的應用中在IIS中託管的應用程序。 –