2016-09-06 146 views
0

我需要使用表單身份驗證將Facebook(以及後來的google等)身份驗證添加到現有的asp.net webforms應用程序。Formsauthentication和owin facebook身份驗證(網頁表單)

我幾乎在那裏,但似乎有formauthentication和owin認證之間的衝突。我的解決方案基於標準VS 2015模板。

相關的代碼重定向到外部認證提供者(Facebook)的如下:

string redirectUrl = 
       ResolveUrl(String.Format(CultureInfo.InvariantCulture, 
        "~/Account/RegisterExternalLogin?{0}={1}&returnUrl={2}", IdentityHelper.ProviderNameKey, 
        provider, ReturnUrl)); 
      var properties = new AuthenticationProperties { RedirectUri = redirectUrl }; 

      Context.GetOwinContext().Authentication.Challenge(properties, provider); 
      Response.StatusCode = 401; 
      Response.End(); 

這工作,如果我關閉形式的身份驗證。如果我有窗體身份驗證,用戶被重定向到web.config中定義窗體身份驗證網址:

<authentication mode="Forms"> 
     <forms name=".ASPXAUTH_Test" loginUrl="~/start/login.aspx" timeout="60" > 
     </forms> 
    </authentication> 

從我understandint的HTTP狀態代碼(401)觸發重定向到URL在web.config 。我試圖設置其他狀態碼,但它們根本不工作。 當我在web.config中關閉表單身份驗證時,實際的登錄過程仍然有效(令人驚訝),但是如果我在未登錄的情況下訪問受保護的頁面,請獲取一個醜陋的IIS錯誤頁面,而不是重定向。

看來,我不能讓工作窗體身份驗證和owin外部認證,共同妥善:-(

工作,到目前爲止,所有的選擇似乎並不誘人的對我說: - 切換到身份框架(在我們的特定環境中,這絕對不是一種選擇,我只是爲了完整而提及它) - 嘗試使用web.api或類似的東西(這可能具有相同的問題) - 放開owin外部認證並用手執行所有事情

有沒有人能夠使這項工作?任何幫助表示感謝。 提前。

回答

0

Halleluja,我發現瞭解決方案:

從.NET 4.5因此能夠防止形成在響應重定向: Response.SuppressFormsAuthenticationRedirect = TRUE;

所以工作代碼是這樣:

  var owinContext = Context.GetOwinContext(); 
      owinContext.Authentication.Challenge(properties, provider); 
      Response.SuppressFormsAuthenticationRedirect = true; 
      Response.StatusCode = 401; 
      Response.End();