2017-02-22 2 views
1

간단한 프로젝트에 Auth0을 추가하고 미들웨어의 작동 방식을 이해하려고합니다. 나는 우리의 예에서 제대로 ASP.NET 핵심 미들웨어의 개념을 이해한다면이 쿠키 존재 및 인증이 수행 할 수있는 경우 내 Startup.cs에서ASP.NET 코어에서 미들웨어를 실행하는 방법

나는,이 코드

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IOptions<AuthSettings> auth0Settings) 
{ 
    loggerFactory.AddConsole(Configuration.GetSection("Logging")); 
    loggerFactory.AddDebug(); 

    if (env.IsDevelopment()) 
    { 
     app.UseDeveloperExceptionPage(); 
    } 

    app.UseStaticFiles(); 

    // Add the cookie middleware 
    app.UseCookieAuthentication(new CookieAuthenticationOptions 
    { 
     AutomaticAuthenticate = true, 
     AutomaticChallenge = true 
    }); 

    // Add the OIDC middleware 
    var options = new OpenIdConnectOptions("Auth0") 
    { 
     // here there are some configurations 
     // ..................... 
    }; 

    options.Scope.Clear(); 
    options.Scope.Add("openid"); 
    options.Scope.Add("name"); 
    options.Scope.Add("email"); 
    options.Scope.Add("picture"); 

    app.UseOpenIdConnectAuthentication(options); 

    app.UseMvc(routeBuilder => 
    { 
     routeBuilder.MapRoute("Default", "{controller=Home}/{action=Index}"); 
    }); 
} 

app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
     AutomaticAuthenticate = true, 
     AutomaticChallenge = true 
}); 

OpenId 미들웨어는 실행되지 않습니다.

app.UseOpenIdConnectAuthentication(options); 

누군가 OpenId 미들웨어가 실행해서는 안되는 것을 어떻게 알 수 있습니까? 하단에서

우리는

app.UseMvc(routeBuilder => 
{ 
    routeBuilder.MapRoute("Default", "{controller=Home}/{action=Index}"); 
}); 

이 어떻게이 항상 실행되어야한다는 것을 알고 않지만 경우에 우리는 우리가 MVC를 사용하지 않는 일부 정적 파일을 요청할 경우.

답변

4

파이프 라인의 모든 단일 미들웨어는 다음 미들웨어를 호출하도록 선택할 수 있습니다. 정적 파일 미들웨어가 요청 된 파일을 찾고 체인의 다음 미들웨어를 호출하지 않기 때문에 정적 파일을 얻는 이유는 MVC 컨트롤러를 치는 대신 정적 파일을 가져 오는 것입니다. 단순히 파일을 응답으로 반환합니다.

AutomaticAuthenticate 인증 미들웨어의 경우 항상 "들어오는 요청을 검사합니다. 관심있는 것을 발견하면 ClaimsPrincipal을 만듭니다."라는 의미입니다. 이 경우 쿠키 인증은 다음 미들웨어로 요청을 전달하기 전에 로그인 쿠키가 요청에있을 때 로그인 한 사용자의 보안 주체를 자동으로 만듭니다.

OpenId Connect 미들웨어는 실제로 실행되지만, AutomaticAuthenticate = true이 있더라도 요청에서 흥미로운 것을 찾지 못하기 때문에 아무 것도하지 않습니다. 콜백 경로에 대한 요청을 찾고 있는데, 기본값은 constructorCallbackPath = new PathString("/signin-oidc");으로 설정되어 있습니다.

두 개의 인증 미들웨어가 이렇게 설정되어 쿠키 미들웨어가 항상 실행되지만 OpenId Connect는 요청시 (예 : MVC 컨트롤러에서 ChallengeResult를 반환하여) ID 공급자로 리디렉션합니다.

+0

"AutomaticChallenge"속성과 관련된 의견이 있으십니까? UseCookieAuthentication 미들웨어에서 AutomaticChallenge를 true로 설정하면 어떤 영향이 있습니까? 필자가 발견 한 바에 따르면 파이프 라인에 UseOpenIdConnectAuthentication이 있으면이 속성을 true로 설정해서는 안됩니다. 이는 기본적으로 OIDC 미들웨어가 AutomaticChallenge를 true로 설정했기 때문입니다. https://github.com/aspnet/Announcements/issues/210 –

+0

AutomaticChallenge는 미들웨어가 요청이 승인되지 않은 경우 직접 챌린지를 요청한 것처럼 행동해야 하는지를 정의합니다. 인증되지 않은 결과 실행에 더 가깝게 등록 된 것 (즉, 나중에 등록 된 것) 만이 2 개가있는 것이 조금 비쌉니다. 그것은 실제로 미들웨어가 기본 설정이어야하는 특정 용도에 따라 다릅니다. * 일반적으로 * OIDC는 사용자가 로그인 공급자로 리디렉션되도록하기 때문에 기본값입니다. – juunas