2015-05-12 69 views
1

我一直在尋找使用Asp.Net Identity和各種提供商使用Facebook,Twitter等提供身份驗證的示例。我可以使用ASPNetIdentity和ActiveDirectory嗎?

我有一個MVC 6解決方案,目前正在使用VS2015 RC開發。它將被部署到組織IIS。 AD主要用於對用戶進行身份驗證,大多數用戶通過域進行身份驗證,可以在本地網絡內進行身份驗證,也可以遠程進行身份驗證

但是,有些用戶可能希望通過互聯網訪問系統,而無需域帳戶。或這些用戶,用戶將註冊,管理員將批准該帳戶並在應用程序數據庫中本地分配角色和權限。

項目組正在請求本地網絡上的用戶或在域中進行身份驗證的用戶不需要登錄。

AD正在使用中,但並非我所知的ADFS。

這甚至可能嗎?我相信我需要的是AD的OWIN提供者,但微軟似乎可以使用ADFS或AAD。

謝謝。

回答

2

對於通過互聯網註冊的用戶,您絕對可以使用Asp.Net Identity。

您也可以使用Asp.Net Identity使用以下nuget包登錄AD用戶,但Windows用戶信息(只是用戶名,電子郵件)將需要存儲在您的應用程序數據庫中。

https://github.com/MohammadYounes/OWIN-MixedAuth

後您實現這個NuGet包,只是這樣做對Windows用戶進行身份驗證。

在ApplicationSignInManager類添加這個方法在IdentityConfig文件,如果Windows用戶在登錄調用此方法。

public async Task<SignInStatus> WindowsLoginAsync(string userName, string password, bool isPersistent) 
    { 
     var signInStatus = SignInStatus.Failure; 
     using (var context = new PrincipalContext(ContextType.Domain, <your_domain_name>)) 
     { 
     var valid = context.ValidateCredentials(userName, password); 
     if (valid) 
     { 
      UserPrincipal userPrincipal = UserPrincipal.FindByIdentity(context, userName); 

      if (userPrincipal != null) 
      { 
       var loginInfo = new ExternalLoginInfo 
       { 
        Login = new UserLoginInfo("Windows", userPrincipal.Sid.ToString()) 
       }; 
       signInStatus = await ExternalSignInAsync(loginInfo, isPersistent); 

       return signInStatus; 
      } 
      } 
     } 
     return signInStatus; 
    } 

這基本上會使用Cookie身份驗證的Windows和Web用戶的一致好評。 用戶通過身份驗證後,您需要在數據庫中添加windows用戶,並在IdentityUserLogin表中添加一個記錄,將LoginProvider添加爲「Windows」,將ProviderKey添加爲userPrincipal.Sid,然後調用SignInManager.SignInAsync登錄用戶。

使用這種方法,我相信Windows用戶也可以通過互聯網登錄,您的組織可能不喜歡。

希望這會有所幫助!

+0

非常感謝。我在本週早些時候發現了Mohammad的解決方案,並進行了一些調整,我製作了一種解決方案,以這種方式登錄AD用戶,並使用存儲庫模式與AspNet Identity Data結構分離。它工作得很好。感謝回覆。 – user1654348

相關問題