2016-09-06 5 views
0

Ich muss Facebook (und später Google usw.) Authentifizierung zu einer vorhandenen asp.net Webforms-Anwendung mit Formularauthentifizierung hinzufügen.Formularauthentifizierung und owin facebook Authentifizierung nebeneinander (Webformulare)

Ich bin fast da, aber es scheint einen Konflikt zwischen Formularauthentifizierung und Authentifizierung zu geben. Meine Lösung basiert auf der Standardvorlage VS 2015.

Der entsprechende Code an der der externe Authentifizierungsanbieter (Facebook) wird umgeleitet werden, wie folgt:

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

Dies funktioniert, wenn ich die Formularauthentifizierung deaktivieren. Wenn ich die Formularauthentifizierung habe, wird der Benutzer auf die Formularauthentifizierung URL umgeleitet in der web.config definiert:

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

Aus meiner understandint des HTTP-Statuscode (401) löst die Umleitung auf die URL in der web.config . Ich habe versucht, andere Statuscodes zu setzen, aber sie funktionieren überhaupt nicht. Wenn ich Formularauthentifizierung in der web.config ausschalte, funktioniert der eigentliche Anmeldevorgang (überraschend) noch, aber wenn ich auf eine geschützte Seite zugreifen, während ich mich nicht eingeloggt habe, bekomme ich eine hässliche IIS Fehlerseite, anstatt umgeleitet zu werden.

Es scheint, dass ich nicht arbeiten Formularauthentifizierung und owin externe Authentifizierung zu arbeiten zusammen richtig :-(

Bisher alle Alternativen scheinen nicht zu mir verlockend bekommen: - Schalter auf die Identität Rahmen (in unserer speziellen Umgebung, das ist absolut KEINE Option. Ich erwähne es nur für die Vollständigkeit) - versuchen Sie, web.api oder etwas ähnliches (das wahrscheinlich das gleiche Problem hat) - loslassen externe Authentifizierung und implementieren alles von Hand

Hat jemand in der Lage, diese Arbeit zu machen? Jede Hilfe wird geschätzt. Danke im Voraus.

Antwort

0

Halleluja, fand ich die Lösung:

Von .Net 4.5 ist es möglich, die Formen in der Antwort umleiten zu verhindern: Response.SuppressFormsAuthenticationRedirect = true;

so der Arbeits Code würde wie folgt aussehen:

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