2014-12-17 1 views
9

У меня установлена ​​аутентификация OpenID Connect в приложении ASP.NET MVC с использованием промежуточного программного обеспечения OWIN.Azure OpenID Connect через OWIN Middleware, приводящий к бесконечной петле перенаправления

Как показывает этот выход Fiddler, после успешного входа в систему через Azure OpenID Connect браузер постоянно перемещается назад и вперед между моим сайтом site.azurewebsites.net и login.windows.net.

Fiddler loop

Я обеспечили следующие ключи правильно соответствие 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="*********" /> 

AD И мой Start.cs код выглядит следующим образом

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

Не уверен, что вызывает это постоянно перенаправлять. Я поместил атрибут [Authorize] на контроллер MVC, куда отправляется URL-адрес перенаправления аутентификации Post Authentication.

+1

Вы изначально нажимаете сайт только на http? не https? У меня такой же сценарий, где, если я попал на сайт только с http, я перенаправляюсь на логин, получает аутентификацию, перенаправляется обратно и заканчивается в цикле. закончил форсировать https. – JuneT

+0

Все доступно на HTTPS. – puri

+1

Вы когда-нибудь находили решение своей проблемы? У меня такая же проблема. Ответ ниже не помог. – dave

ответ

1

Что здесь происходит, связано с тем, что заметил июнь. Это связано с дефолтом по CookieAuthenticationOptions.CookieSecure == CookieSecureOption.SameAsRequest. Поскольку вы начали с http, окончательная переадресация связана с http. Запрос, создавший «authcookie», был https от AAD.

Мне удалось получить эту работу, установив CookieSecure == CookieSecureOption. Всегда. Это означает, что cookie может протекать вместе с вашим auth.

Должен быть способ гарантировать, что страницы, на которых auth будут принимать соединения только на https.

+1

я заставил мину с помощью этого (обратите внимание, в моем случае я хочу весь сайт в HTTPS): <имя правила = "Force HTTPS" разблокированы = "истинный">< матч URL = "(.*) "IgnoreCase = "ложных"/> <добавить вход = "{HTTPS}" шаблон = "выключено"/> <тип действия = "Redirect" URL =" https: // {HTTP_HOST}/{R: 1} "appendQueryString =" true "redirectType =" Постоянный "/> JuneT

0

Fixed этого вопроса, гарантируя, что запрос использует протокол HTTPS перед перенаправлением на 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

Я сталкивался с таким же вопросом и установил его с помощью NuGet пакета kentor.owincookiesaver. Используйте код, как показано ниже: -

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

 Смежные вопросы

  • Нет связанных вопросов^_^