Apache Shiro는 자바 기반의 오픈 소스 보안 프레임워크로, 인증 및 권한 관리를 위한 다양한 기능을 제공합니다. JWT(토큰 기반 웹 인증)은 인증된 사용자를 식별하기 위해 사용되는 토큰입니다. 이번 글에서는 Apache Shiro를 사용하여 JWT 토큰을 검증하는 방법에 대해 알아보겠습니다.
1. Shiro 설정
Apache Shiro를 사용하기 위해 먼저 Maven 또는 Gradle 등을 사용하여 Shiro를 프로젝트에 추가해야 합니다. 예를 들어 Maven의 경우, pom.xml
파일에 다음 의존성을 추가합니다:
<dependencies>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.7.1</version>
</dependency>
</dependencies>
2. JWT 토큰 검증
JWT 토큰을 검증하기 위해 Shiro에서 제공하는 JWTToken
클래스를 사용합니다. 검증을 위해 필요한 키나 비밀은 별도로 설정해야 합니다. 다음은 간단한 예제 코드입니다:
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
public class JWTRealm extends AuthorizingRealm {
@Override
public boolean supports(AuthenticationToken token) {
return token instanceof JWTToken;
}
// JWT 토큰을 검증하는 로직을 구현합니다.
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) {
JWTToken jwtToken = (JWTToken) token;
String jwt = jwtToken.getCredentials();
// JWT 토큰 검증 로직
// ...
// 검증에 성공하면 사용자 정보를 리턴합니다.
return new SimpleAuthenticationInfo(jwt, jwt, getName());
}
// 권한 정보를 설정하는 로직을 구현합니다.
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
// ...
}
}
위의 코드에서 doGetAuthenticationInfo
메서드에서 JWT 토큰 유효성 검사 로직을 구현하면 됩니다. 검증에 성공하면 SimpleAuthenticationInfo
를 리턴하며, 사용자 정보는 JWT 토큰 자체를 사용합니다.
3. Shiro 설정 파일 수정
위에서 작성한 JWTRealm
클래스를 Shiro 설정 파일에 등록해야 합니다. shiro.ini
또는 shiro.yml
파일을 열어 다음과 같이 설정합니다:
[main]
jwtRealm = com.example.JWTRealm
[urls]
/** = jwt
이렇게 설정하면 모든 URL에 대해 JWT 토큰 인증을 수행하게 됩니다. 필요에 따라 URL 패턴을 변경할 수 있습니다.
4. JWT 토큰 생성 및 검증하기
실제로 JWT 토큰을 생성하고 검증하기 위해서는 해당 기능을 구현해야 합니다. 일반적으로 JWT 라이브러리를 사용하거나 직접 구현할 수 있습니다.
위의 JWTRealm
클래스에서 검증 로직을 구현할 때에는 JWT 라이브러리를 사용하여 토큰을 검증하는 것이 일반적입니다. 필요에 따라 토큰의 유효 기간, 암호화, 발급자 등을 검증할 수 있습니다.
마무리
Apache Shiro와 JWT를 함께 사용하여 토큰 기반의 인증을 구현하는 방법에 대해 알아보았습니다. 이를 통해 보다 안전하고 유연한 웹 애플리케이션을 개발할 수 있습니다.
참고: