2016-01-24 141 views
0

我寫過一個網站,使用Owin使用標準登錄表單進行登錄。這工作正常。每個客戶都在其服務器上擁有自己的網站版本,並使用不同的web.config值,因此它們的行爲方式均符合各自的要求。MVC ASP.Net本地Active Directory登錄

我現在被要求提供一個版本,通過檢索他們的Windows ID自動登錄用戶,然後使用它從本地Active Directory獲取他們的詳細信息。

我有一個腳本會做到這一點,但我很難調用它。

我想保留儘可能多的代碼,因此我可以繼續使用User和UserManager對象。

我希望有可能修改Startup.Auth.cs腳本中的某些內容,以便不使用LoginPath作爲CookieAuthenticationOptions,而是指向我的Active Directory腳本。

 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)) 
      } 
     }); 

不幸的是更換與Active Directory腳本的路徑LOGINPATH導致無限循環,導致查詢字符串是針對瀏覽器的錯誤太長。

我已設置IIS有: 匿名身份驗證:禁用,ASP.Net模擬:啓用,窗體身份驗證:禁用,Windows身份驗證:啓用

我一直停留在此爲過去的5天,以便任何幫助將不勝感激。謝謝。

回答

1

只需創建自己的提供程序,它將根據您的AD檢查用戶名和密碼,並將其添加到appBuilder中的CookieAuthenticationOptions對象。您的提供者類應該繼承CookieAuthenticationProvider並覆蓋您需要的登錄方法。在這裏,你可以找到可用的方法

https://msdn.microsoft.com/en-us/library/microsoft.owin.security.cookies.cookieauthenticationprovider(v=vs.113).aspx

+0

感謝您的答案列表。唯一不是'UseWindowsAzureActiveDirectoryBearerAuthentication'僅適用於Azure Active Directory,而我需要連接到存儲在本地服務器上的Active Directory? – spaceduk

+0

要添加更多詳細信息,我正在使用LDAP連接字符串連接到Active Directory – spaceduk

+0

對不起,我的錯。在這種情況下,只需創建您自己的提供程序,它將根據您的AD檢查用戶名和密碼,並將其添加到appBuilder中的CookieAuthenticationOptions對象。您的提供者類應該繼承CookieAuthenticationProvider並覆蓋您需要的登錄方法。在這裏你可以找到可用的方法列表https://msdn.microsoft.com/en-us/library/microsoft.owin.security.cookies.cookieauthenticationprovider(v=vs.113).aspx – hellwd