ASPNET 7 - Authentication
2022. 12. 8. 00:00ㆍASPNET/ASPNET 7
반응형
6.0 버전에도 있었던 인증 관련 기능 이지만 aspnet core 7 부터는 조금더 간소화 되었다.
이전 버전 같은 경우는 다음과 같은 내용들이 있었다.
builder.Services.AddAuthentication(x =>
{
x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(x =>
{
x.SaveToken = true;
x.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(token.Secret)),
ValidIssuer = token.Issuer,
ValidAudience = token.Audience,
ValidateIssuer = false,
ValidateAudience = false,
//ClockSkew = isDevelopment ? TimeSpan.Zero : TimeSpan.FromSeconds(30)
};
});
app.UseAuthentication();
app.UseAuthentication();
그러나 7 버전 부터는 default 설정에서 저런 부분을 처리 하는 방법이 있다.
builder.Services.AddAuthentication().AddJwtBearer();
builder.Services.AddAuthorization();
...
app.UseAuthentication();
app.UseAuthentication();
AddJwtBearer() 에서 에러가 발생한다. 다음을 추가하자
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
swagger 에서 Test 하기 위해서 Swagger 관련 config 을 설정 해야 하는데
아래와 같은 코드들을 추가하자
builder.Services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "BizServer API", Version = "v1" });
c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
{
In = ParameterLocation.Header,
Type = SecuritySchemeType.Http,
Name = "Bearer",
BearerFormat = "JWT",
Description = "Please enter authorization key",
Scheme = "Bearer"
});
c.AddSecurityRequirement(new OpenApiSecurityRequirement()
{
{
new OpenApiSecurityScheme()
{
Reference = new OpenApiReference()
{
Type = ReferenceType.SecurityScheme,
Id = "Bearer"
}
},
Enumerable.Empty<string>().ToList()
}
});
c.CustomSchemaIds(x => x.FullName?.Replace("+", "."));
});
builder.Services.Configure<SwaggerGeneratorOptions>(opts =>
{
opts.InferSecuritySchemes = true;
});
** Bearer 관련 문자에 대소문자를 조심하자
사실 표준으로는 대문자 B 가 아닌 소문자 b 가 와야 한다.
원래는 bearer 로 해도 처리가 되었는데 7.0 부터 처리가 안되는것 같다.
swashbuckle 에 bug 인지는 확실하지 않다. **
사용할때는 아래와 같이 사용한다.
var route = app.MapGroup("/route")
.RequireAuthorization().WithOpenApi(); // group 전체에 인증 요청
route.MapGet("/", () =>
{
return $"Hello!! {DateTime.Now.Ticks}";
});
route.MapGet("/user", (string name) =>
{
return $"Hello!! {name}";
});
하나하나에 적용 할 수도 있다.
app.MapGet("/user", (string name) =>
{
return $"Hello!! {name}";
}).RequireAuthorization(); // method 를 사용하여 처리
...
app.MapGet("/user", [Authorize](string name) => // attribute를 사용하여 통해 처리
{
return $"Hello!! {name}";
});
관련영상
반응형
'ASPNET > ASPNET 7' 카테고리의 다른 글
gRPC HealthCheck (0) | 2022.12.15 |
---|---|
ASPNET 7 - Endpoint Filter (0) | 2022.12.12 |
ASPNET 7 - Route Group and Swagger (0) | 2022.12.05 |
ASPNET 7 - Rate Limit (0) | 2022.12.01 |
ASPNET 7 - Output Cache (0) | 2022.11.28 |