인증에서 권한 부여로 확장

날아올라돼지야·2024년 8월 30일
0

이 강의에서는 Gateway 서버에서 인증뿐만 아니라 권한 부여를 적용하는 방법에 대해 설명합니다. 현재는 클라이언트 애플리케이션이 인증되었는지만 확인하고 있지만, 특정 역할이나 권한을 가진 클라이언트만이 요청을 처리할 수 있도록 하고자 합니다.


단계별 설정 및 구현 과정

  1. 인증에서 권한 부여로 전환:

    • 기존의 authenticated 메서드를 hasRole 메서드로 대체하여 특정 역할이 있는 클라이언트만 요청을 처리할 수 있도록 설정합니다.
    • accounts 관련 API는 클라이언트가 accounts 역할을 가져야만 처리되도록 설정합니다.
    • 비슷한 방식으로 cardsloans 관련 API도 설정할 수 있습니다.
  2. Keycloak에서 역할(Role) 생성:

    • Keycloak 관리자 콘솔에서 클라이언트의 서비스 계정 역할(Service Account Roles)을 설정합니다.
    • Roles 탭에서 새로운 역할(예: accounts)을 생성하고 저장합니다.
    • 생성된 역할을 클라이언트에 할당합니다.
  3. JWT에서 역할 정보 추출:

    • KeycloakRoleConverter 클래스를 생성하여 JWT 토큰에서 역할 정보를 추출하고, Spring Security 프레임워크가 이해할 수 있는 형태로 변환합니다.
    • 이 클래스는 Converter<Jwt, Collection<GrantedAuthority>> 인터페이스를 구현하며, convert() 메서드에서 역할 정보를 추출하여 GrantedAuthority 객체로 변환합니다.
    • realm_access에서 역할 정보를 추출하고, 각각의 역할에 ROLE_ 접두사를 추가한 후, SimpleGrantedAuthority 객체로 변환합니다.
  4. SecurityConfig에서 RoleConverter 통합:

    • SecurityConfig 클래스에 grantedAuthoritiesExtractor() 메서드를 추가하여, JwtAuthenticationConverter를 사용해 커스텀 역할 변환 로직을 Spring Security 설정에 통합합니다.
    • 기존의 Customizer.withDefaults() 설정을 제거하고, 대신 jwtAuthenticationConverter를 설정하여, JWT 토큰에서 역할 정보를 추출하도록 합니다.
  5. 코드 변경 후 빌드 및 테스트:

    • 모든 변경 사항을 저장하고 애플리케이션을 다시 빌드합니다.
    • 다음 강의에서 이러한 변경 사항을 테스트하여, 설정이 제대로 작동하는지 확인합니다.

요약

이제 Gateway 서버에서 인증뿐만 아니라 권한 부여까지 처리할 수 있도록 설정했습니다. 특정 역할을 가진 클라이언트만이 해당 API에 접근할 수 있도록 설정함으로써, 더욱 강화된 보안 체계를 구현할 수 있습니다.

감사합니다, 다음 강의에서 테스트를 진행하며 설정이 제대로 작동하는지 확인해보겠습니다. 안녕히 계세요!

profile
무슨 생각하며 사니

0개의 댓글