이 강의에서는 Gateway 서버에서 인증뿐만 아니라 권한 부여를 적용하는 방법에 대해 설명합니다. 현재는 클라이언트 애플리케이션이 인증되었는지만 확인하고 있지만, 특정 역할이나 권한을 가진 클라이언트만이 요청을 처리할 수 있도록 하고자 합니다.
인증에서 권한 부여로 전환:
authenticated
메서드를 hasRole
메서드로 대체하여 특정 역할이 있는 클라이언트만 요청을 처리할 수 있도록 설정합니다.accounts
관련 API는 클라이언트가 accounts
역할을 가져야만 처리되도록 설정합니다.cards
와 loans
관련 API도 설정할 수 있습니다.Keycloak에서 역할(Role) 생성:
accounts
)을 생성하고 저장합니다.JWT에서 역할 정보 추출:
Converter<Jwt, Collection<GrantedAuthority>>
인터페이스를 구현하며, convert()
메서드에서 역할 정보를 추출하여 GrantedAuthority
객체로 변환합니다.realm_access
에서 역할 정보를 추출하고, 각각의 역할에 ROLE_
접두사를 추가한 후, SimpleGrantedAuthority
객체로 변환합니다.SecurityConfig에서 RoleConverter 통합:
SecurityConfig
클래스에 grantedAuthoritiesExtractor()
메서드를 추가하여, JwtAuthenticationConverter
를 사용해 커스텀 역할 변환 로직을 Spring Security 설정에 통합합니다.Customizer.withDefaults()
설정을 제거하고, 대신 jwtAuthenticationConverter
를 설정하여, JWT 토큰에서 역할 정보를 추출하도록 합니다.코드 변경 후 빌드 및 테스트:
이제 Gateway 서버에서 인증뿐만 아니라 권한 부여까지 처리할 수 있도록 설정했습니다. 특정 역할을 가진 클라이언트만이 해당 API에 접근할 수 있도록 설정함으로써, 더욱 강화된 보안 체계를 구현할 수 있습니다.
감사합니다, 다음 강의에서 테스트를 진행하며 설정이 제대로 작동하는지 확인해보겠습니다. 안녕히 계세요!