2014-12-17 14 views
9

Tôi đã thiết lập xác thực OpenID Connect trong ứng dụng ASP.NET MVC của mình bằng cách sử dụng OWIN Middleware.Kết nối OpenID của Azure qua OWIN Middleware dẫn đến Vòng chuyển hướng vô hạn

Khi đầu ra Fiddler này hiển thị, sau khi đăng nhập thành công qua Azure OpenID Connect, trình duyệt liên tục lặp lại qua lại giữa site.azurewebsites.net và login.windows.net của tôi.

Fiddler loop

tôi đã đảm bảo sau khóa được phù hợp một cách chính xác thông tin Azure AD

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

Và mã Start.cs của tôi là như sau

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

Không chắc những gì đang gây ra điều này liên tục chuyển hướng. Tôi đã đặt thuộc tính [Authorize] trên Bộ điều khiển MVC nơi Url chuyển hướng đăng bài xác thực.

+1

ban đầu bạn chỉ truy cập trang web trên http? không phải https? tôi có cùng một kịch bản mà nếu tôi nhấn vào trang web chỉ với http, tôi được chuyển hướng để đăng nhập, được xác thực, chuyển hướng trở lại và kết thúc trong một vòng lặp. đã kết thúc buộc https. – JuneT

+0

Mọi thứ đang được truy cập trên HTTPS. – puri

+1

Bạn đã bao giờ tìm ra giải pháp cho vấn đề của mình chưa? Tôi gặp một vấn đề tương tự. Câu trả lời dưới đây không giúp được gì. – dave

Trả lời

1

những gì đang xảy ra ở đây liên quan đến những gì JuneT nhận thấy. Điều này liên quan đến mặc định trên CookieAuthenticationOptions.CookieSecure == CookieSecureOption.SameAsRequest. Kể từ khi bạn bắt đầu tại http, chuyển hướng cuối cùng là http. Yêu cầu tạo 'authcookie' là https từ AAD.

Tôi có thể làm việc này bằng cách đặt CookieSecure == CookieSecureOption.Always. Điều này có nghĩa là cookie có thể bị rò rỉ cùng với auth của bạn.

Phải có cách đảm bảo rằng các trang mà auth sẽ chỉ chấp nhận các kết nối trên https.

+1

tôi buộc tôi thông qua điều này (lưu ý, trong trường hợp của tôi tôi muốn toàn bộ trang web trong https): JuneT

0

Cố định vấn đề này bằng cách đảm bảo yêu cầu được sử dụng https TRƯỚC chuyển hướng đến 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

tôi phải đối mặt với cùng một vấn đề và cố định nó bằng cách sử dụng NuGet gói kentor.owincookiesaver. Sử dụng mã như sau: -

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)); 
} 
Các vấn đề liên quan