스프링 프로젝트로 인증 및 인가를 구현해보기
- 스프링 프로젝트로 인증 및 인가를 구현해본다.
- 구현에 있어 inteceptor, jasonwebtoken, env, swagger 등을 접목하였다.
- 직접 구현 흐름을 살펴보면서 각각을 설명한다.
1. environmet variable 세팅
// env.properties 파일
jwt.prefix=Bearer
jwt.access.secret=purple
jwt.access.expiration=30
- prefix, 암호화 문자열, 만료시간 등을 세팅해주었다.
// PropertyConfig 파일
@Configuration
@PropertySource("classpath:/env.properties")
class PropertyConfig
// JwtTokenProvider 파일
@Component
@PropertySource("classpath:/env.properties")
class JwtTokenProvider(environment: Environment) {
.
.
생략
.
.
val prefix = environment.getProperty("jwt.prefix")!!
val secret = environment.getProperty("jwt.access.secret")!!
val expiration = environment.getProperty("jwt.access.expiration")!!
fun issueAccessToken(user: User): String {
val now = Date()
return Jwts.builder()
.setHeaderParam(Header.TYPE, Header.JWT_TYPE)
.setIssuer("admin")
.setIssuedAt(now)
.setExpiration(Date(now.time + Duration.ofMinutes(expiration.toLong()).toMillis()))
.claim("id", user.id)
.claim("email", user.email)
.signWith(SignatureAlgorithm.HS256, secret)
.compact()
}
}
- config 파일에 @Configuration, @PropertySource 어노테이션을 적용하여 환경변수를 명시한 파일의 path를 등록해줄 수 있다.
- 혹은 직접 클래스에 사용할 환경변수 파일의 path를 적용할 수 있다. (마찬가지로 @PropertySource 사용)
2. jwt 토큰 세팅 및 발급
dependencies {
.
.
생략
.
.
implementation("io.jsonwebtoken:jjwt:0.9.1")
}
- jsonwebtoken:jjwt 라이브러리를 build.gradle.kts에 적용한다.
// JwtTokenProvider 파일
@Component
@PropertySource("classpath:/env.properties")
class JwtTokenProvider(environment: Environment) {
val prefix = environment.getProperty("jwt.prefix")!!
val secret = environment.getProperty("jwt.access.secret")!!
val expiration = environment.getProperty("jwt.access.expiration")!!
fun issueAccessToken(user: User): String {
val now = Date()
return Jwts.builder()
.setHeaderParam(Header.TYPE, Header.JWT_TYPE)
.setIssuer("admin")
.setIssuedAt(now)
.setExpiration(Date(now.time + Duration.ofMinutes(expiration.toLong()).toMillis()))
.claim("id", user.id)
.claim("email", user.email)
.signWith(SignatureAlgorithm.HS256, secret)
.compact()
}
}
- 우선 JwtTokenProvider 클래스에 등록한 환경변수 값을 로드하였다.