2016-09-06 6 views
0

Мне нужно добавить аутентификацию Facebook (и более поздней версии Google и т. Д.) В существующее приложение веб-форм asp.net с использованием проверки подлинности форм.Formsauthentication и owin facebook authentication by side (веб-формы)

Im почти там, но, похоже, существует конфликт между формами аутентификации и аутентификацией 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(); 

Это работает, если я отключить проверку подлинности форм. Если у меня есть проверки подлинности форм, пользователь перенаправляется на URL аутентификации формы, определенной в 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();