2014-12-17 6 views
9

Ich habe OpenID Connect Authentifizierung in meiner ASP.NET MVC-Anwendung mit OWIN Middleware eingerichtet.Azure OpenID Connect über OWIN Middleware führt zu Infinite Redirect Loop

Wie diese Fiddler-Ausgabe zeigt, führt der Browser, nachdem er sich erfolgreich über Azure OpenID Connect angemeldet hat, fortlaufend zwischen meiner site.azurewebsites.net und login.windows.net hin und her.

Fiddler loop

Ich habe folgende Schlüssel sichergestellt richtig Azure AD Informationen

<add key="ida:AADInstance" value="https://login.windows.net/{0}" /> 
<add key="ida:Tenant" value="******.onmicrosoft.com" /> 
<add key="ida:ClientId" value="*******" /> 
<add key="ida:PostLogoutRedirectUri" value="*********" /> 

Und mein Start.cs Code ist passen wie folgt

private static string clientId = ConfigurationManager.AppSettings["ida:ClientId"]; 
    private static string aadInstance = ConfigurationManager.AppSettings["ida:AADInstance"]; 
    private static string tenant = ConfigurationManager.AppSettings["ida:Tenant"]; 
    private static string postLogoutRedirectUri = ConfigurationManager.AppSettings["ida:PostLogoutRedirectUri"]; 

    private string authority = String.Format(CultureInfo.InvariantCulture, aadInstance, tenant); 

    IAuthorizationService authorizationService = new AuthorizationService(); 

    public void ConfigureAuth(IAppBuilder app) 
    { 
     app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType); 

     app.UseCookieAuthentication(new CookieAuthenticationOptions() 
     { 

      ExpireTimeSpan =TimeSpan.FromMinutes(15) 
     }); 

     app.UseOpenIdConnectAuthentication(
      new OpenIdConnectAuthenticationOptions 
      { 
       ClientId = clientId, 
       Authority = authority, 
       PostLogoutRedirectUri = postLogoutRedirectUri} 
      }); 
    } 
} 

nicht sicher, was ist der Grund dafür zu ständig umleiten. Ich habe ein [Authorize]-Attribut auf dem MVC-Controller platziert, wo Post Authentication Redirect Url geht.

+1

schlagen Sie zunächst die Website nur auf http? nicht https? Ich habe das gleiche Szenario, wo ich, wenn ich die Website nur mit http trete, werde ich weitergeleitet, um sich anzumelden, wird authentifiziert, umgeleitet zurück und endet in einer Schleife. endete damit, https zu zwingen. – JuneT

+0

Alles wird auf HTTPS zugegriffen. – puri

+1

Haben Sie jemals eine Lösung für Ihr Problem gefunden? Ich habe ein ähnliches Problem. Die folgende Antwort hat nicht geholfen. – dave

Antwort

1

was hier passiert, hängt damit zusammen, was JuneT bemerkt hat. Dies hängt mit dem Standardwert für CookieAuthenticationOptions.CookieSecure == CookieSecureOption.SameAsRequest zusammen. Seit Sie bei http begonnen haben, ist die letzte Weiterleitung zu http. Die Anfrage, die den 'authcookie' erstellt hat, war https von AAD.

Ich konnte dies durch Setzen von CookieSecure == CookieSecureOption.Always. Dies bedeutet, dass Cookie zusammen mit Ihrer Authentifizierung auslaufen kann.

Gibt es einen Weg, um sicherzustellen, dass Seiten, die auth nur Verbindungen auf https akzeptieren.

+1

i gezwungen Mine über diese (beachten Sie, wollen in meinem Fall i ganze Seite auf https): JuneT

0

dieses Problem wurde behoben, durch diese Anforderung gewährleistet wird über https VOR

  app.UseOpenIdConnectAuthentication(
      new OpenIdConnectAuthenticationOptions 
      { 
       ClientId = AppConfig.ClientId, 
       Authority = AppConfig.Authority, 

       Notifications = new OpenIdConnectAuthenticationNotifications 
       { 
        RedirectToIdentityProvider = context => 
         { 
          if (context.ProtocolMessage.RequestType == OpenIdConnectRequestType.AuthenticationRequest) 
          { 
           // ensure https before redirecting to Azure 
           if (!context.Request.IsSecure) 
           { 
            context.Response.Redirect(string.Format("https://{0}{1}", context.Request.Uri.Authority, context.Request.Uri.AbsolutePath)); 
            context.HandleResponse(); 
            return Task.FromResult(0); 
           } 
          } 

          return Task.FromResult(0); 
         }, 

        AuthenticationFailed = context => 
            { 
             context.HandleResponse(); 
             context.Response.Redirect(AppConfig.RedirectUri + "SignInError?message=" + context.Exception.Message); 
             return Task.FromResult(0); 
            }, 
       }, 
      }); 
0

ich das gleiche Problem konfrontiert und fixiert es zu Azure Umleitung durch die Verwendung nuget Paket kentor.owincookiesaver. Verwenden Sie den folgenden Code: -

public void ConfigureAuth(IAppBuilder app) 
{ 
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType); 

app.UseKentorOwinCookieSaver();//Workaround for infinite loop between webapp & login page 

app.UseCookieAuthentication(new CookieAuthenticationOptions()); 
app.UseOpenIdConnectAuthentication(CreateOptionsFromPolicy(SignUpPolicyId)); 
app.UseOpenIdConnectAuthentication(CreateOptionsFromPolicy(ProfilePolicyId)); 
app.UseOpenIdConnectAuthentication(CreateOptionsFromPolicy(SignInPolicyId)); 
}