2017-12-20 36 views
0

cookie 및 jwt auth 구성표가있는 앱이 있습니다.asp.net core 2.0 특정 스키마로 승인

var authTokenSettings = configuration.GetSection(nameof(TokenProviderSettings)).Get<TokenProviderSettings>(); 

services.AddAuthentication(options => 
{ 
    options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; 
    options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; 
}) 
.AddCookie(authSection.AuthenticationScheme, u => 
{ 
    u.Cookie.Name = authSection.AuthCookieName; 
    u.LoginPath = new PathString(authSection.LoginPath); 
    u.AccessDeniedPath = "/Home/Index"; 
}) 
.AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options => 
{ 
    options.RequireHttpsMetadata = false; 
    options.TokenValidationParameters = new TokenValidationParameters 
    { 
     ValidateIssuer = true, 
     ValidIssuer = authTokenSettings.Issuer, 
     ValidateAudience = true, 
     ValidAudience = authTokenSettings.Audience, 
     ValidateLifetime = true, 
     IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(authTokenSettings.Key)), 
     ValidateIssuerSigningKey = true, 
    }; 
}); 

가 지금은 다른 한편으로는 하나의 방법 및 JWT에 쿠키 방식을 사용합니다 :이 ConfigureServices 코드입니다. 적절한 속성을 추가했습니다.

([Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]) 

그러나 이러한 속성은 무시되며 기본 구성표가 사용됩니다. 나는 기본 방식을 지정하지 않으면,이 예외가 :

System.InvalidOperationException : 없음 authenticationScheme 지정된 , 그리고 찾을 수 없습니다 DefaultChallengeScheme이 없었다.

코드에 어떤 문제가 있습니까?

+0

특성이 무시된다는 것은 무엇을 의미합니까? Authorize 속성에서 스키마로 Jwt를 지정합니다.이 속성은 또한 사용자의 구성에 따라 기본값입니다. 물론 "기본"체계가 있습니다. - 자체적으로 문제를 해결할 수 없기 때문에 쿠키 인증을 자체적으로 사용할 수 없습니다. 기본 요청 방식으로 요청 요청을 전달하므로 config를 사용하면 Jwt 인증을 계속 실행할 수 있습니다. – poke

+0

쿠키 인증이있는 app가 있으며 jwt를 2 가지 방법으로 추가합니다. 쿠키 인증 방식을 기본값으로 설정하면 jwt auth가 무시됩니다. – AlexK

+0

정말 무시됩니까? 아니면 기본값대로 실행되는 것입니까? – CalC

답변

0

문제를 해결했습니다. 특성 [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]은 동작이 아닌 컨트롤러에 추가 된 경우에만 인증 체계를 정의합니다.

+0

나는 그것이 사실이라고 생각하지 않습니다. 나는 당신이 컨트롤러 수준에서 하나를 가지지 않고 특정 행동에 대해 '오버라이드'하려고하기보다는 '혼합 된'컨트롤러의 각 동작에'[Authorize]'속성이 필요할 것이라고 생각합니다. – CalC

+0

나는 그것을 시도했지만 위에 설명한 문제에 직면했다. 그리고 컨트롤러를 2 개의 다른 컨트롤러로 분할하고 각 컨트롤러에 속성을 추가하면 – AlexK