현재 Authorization 헤더를 통해 보내는 Firebase ID 토큰을 사용하여 사용자를 인증하려고합니다. 그러나 모든 방법으로 각 요청에 대해 항상 HTTP 403 오류가 발생합니다. 내가 사용하는 토큰은 verifyIdToken(idToken)
이것을 디버깅 할 때 메서드 가 예외를 던지지 않기 때문에 유효 하므로이 문제는 Firebase보다 Spring Security와 더 관련이 있다고 생각합니다.
그 이유는 무엇일까요?
내가 만든 Firebase 필터에 대한 내 코드 :
@Component
class FirebaseFilter : OncePerRequestFilter() {
override fun doFilterInternal(request: HttpServletRequest,
response: HttpServletResponse,
filterChain: FilterChain) {
val authToken = request.getHeader(AUTH_HEADER).substring(7)
if (authToken!="") {
SecurityContextHolder.getContext().authentication = getAuthentication(authToken)
logger.debug("Successfully Authenticated")
}
filterChain.doFilter(request, response)
}
private fun verifyIdToken(idToken: String): FirebaseToken {
require(idToken!="") { "idToken is blank" }
return FirebaseAuth.getInstance().verifyIdToken(idToken)
}
private fun getAuthentication(idToken: String): UsernamePasswordAuthenticationToken {
val token = verifyIdToken(idToken)
return UsernamePasswordAuthenticationToken(token.uid,token)
}
companion object {
private const val AUTH_HEADER = "Authorization"
}
}
WebSecurityConfigurerAdapter의 코드 :
@EnableWebSecurity
@Configuration
class HttpConfig : WebSecurityConfigurerAdapter() {
@Autowired
lateinit var firebaseFilter: FirebaseFilter
override fun configure(http: HttpSecurity) {
http.cors().and().csrf().disable()
.authorizeRequests()
.anyRequest().authenticated().and()
.addFilterBefore(firebaseFilter, UsernamePasswordAuthenticationFilter::class.java)
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
}
}