2017-06-13 26 views
1

我正在將Azure AD身份驗證添加到現有的MVC應用程序,在該應用程序中它使用OWIN標識從SQL數據庫驗證用戶。使用OpenId連接到Azure AD,然後模擬現有的標識用戶

數據庫用戶在具有特定規則的複雜業務中用於管理應用程序的某些部分。

我已經實現ID連接與Azure和能夠登錄,但我需要映射驗證與用戶身份的AD已經存在,那麼這個冒充的身份與登錄..

我做了這個控制器我重定向到AD身份驗證成功後:

現在應用程序確實重定向,但身份保持從AD而不是身份之一。

這段代碼有什麼問題?我該如何解決它?

if (Request.IsAuthenticated) 
      { 
       //The AD Name Identity is the user email 
       var email = User.Identity.Name; 

       //Get the user from Identity Provider 
       var user = UserManager.Users.FirstOrDefault(t => t.Email == email); 

       if(user!= null) 
       { 
        //Sign In and Authenticate User 
        var identity = UserManager.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie); 
        var authenticationManager = HttpContext.GetOwinContext().Authentication; 

        authenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = true }, identity); 

        var authenticationOptions = new CookieAuthenticationOptions 
        { 
         AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie 
        }; 

        var app = HttpContext.GetOwinContext().Get<AppBuilderProvider>().Get(); 
        app.UseCookieAuthentication(authenticationOptions); 

        return RedirectToAction("Index", "Dashboard"); 
       } 

       return RedirectToAction("Index", "Dashboard"); 
      } 

回答

0

如果您嘗試關聯或鏈接AD帳戶與本地帳戶,請在新的Web項目中查看默認的ASP.net標識代碼。它使用本地帳戶和任意數量的外部帳戶跟蹤和管理用戶。如果不解決問題,這應該讓你朝着正確的方向前進。

但是,如果要模擬登錄的其他用戶(例如,用於調試),那就是爲了實施。

這是一種方法:當您使用外部提供程序進行身份驗證時,用戶將重定向回您的控制器(通常在AccountController中稱爲外部登錄或某事的操作)。

默認情況下,此操作將向用戶提供來自外部提供商的聲明信息。

此時您可以選擇如何實現「模仿」。

•您可以允許用戶根據權限模擬另一個用戶,將其簽名並以選定用戶的身份登錄。 •您可以將模擬用戶ID存儲爲排序的會話變量,並以用戶身份進行檢查(如果實際用戶不存在,則返回實際用戶)

如何實施模擬取決於您。

+0

您好,感謝您的回覆..我正在尋找您提到的第一種方法,因爲最後我想要做的是連接2個源AD和本地帳戶,這個想法很簡單,如果一個AD用戶驗證和這個AD用戶已經存在本地然後我想看到他的實體,配置文件,數據..等等.. 是否有我可以參考的代碼示例?謝謝 –

+0

非常感謝託尼,我能夠在你的指示幫助下做到這一點。這是謎題的一部分,我剛剛從一個新的MVC項目模板中複製了外部登錄機制,它的工作方式和預期的一樣。 –

相關問題