2014-12-17 15 views
9

Ho installato l'autenticazione OpenID Connect nella mia applicazione ASP.NET MVC utilizzando OWIN Middleware.Azure OpenID Connect tramite OWIN Middleware con conseguente ciclo di reindirizzamento infinito

Come mostra questo output di Fiddler, una volta eseguito correttamente l'accesso tramite OpenID Connect di Azure, il browser scorre continuamente avanti e indietro tra my.azurewebsites.net e login.windows.net.

Fiddler loop

Ho assicurato seguenti tasti sono correttamente informazioni corrispondenti dC Azure

<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="*********" /> 

E il mio codice Start.cs è la seguente

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} 
      }); 
    } 
} 
Non

sicuro che cosa sta causando questo a costantemente reindirizzare. Ho inserito un attributo [Authorize] sul controller MVC in cui va l'URL di reindirizzamento post-autenticazione.

+1

stai inizialmente colpendo il sito Web solo su http? non https? Ho lo stesso scenario in cui se colpisco il sito Web solo con http, vengo reindirizzato per accedere, viene autenticato, reindirizzato e finisce in un ciclo. finito per forzare https. – JuneT

+0

Tutto è accessibile su HTTPS. – puri

+1

Hai mai trovato una soluzione al tuo problema? Sto avendo un problema simile. La risposta qui sotto non ha aiutato. – dave

risposta

1

ciò che sta accadendo qui è legato a ciò che JuneT ha notato. Questo è legato al default su CookieAuthenticationOptions.CookieSecure == CookieSecureOption.SameAsRequest. Poiché hai iniziato da http, il reindirizzamento finale è su http. La richiesta che ha creato "authcookie" era https da AAD.

Sono riuscito a farlo funzionare impostando CookieSecure == CookieSecureOption.Always. Ciò significa che il cookie potrebbe perdere insieme all'autore.

È necessario un modo per garantire che le pagine autorizzate solo accetti le connessioni su https.

+1

ho costretto mio tramite questo (nota, nel mio caso voglio intero sito in https): JuneT

0

risolto questo problema garantendo che richiesta sta utilizzando HTTPS prima di reindirizzare Azure

  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

Ho affrontato lo stesso problema e riparato utilizzando NuGet pacchetto kentor.owincookiesaver. Usa il codice come segue: -

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