작성
·
746
·
수정됨
1
안녕하세요
강의에서는 resource 서버가 받은 토큰 검증 과정에서 opaqueToken을 사용하고 있는데요.
JWT 경우로 질문을 드리고 싶습니다.
JWT토큰도 opaqueToken과 마찬가지로 oauth2/revoke api를 호출하면 정상적으로 meta.invalidated 필드가 true로 변경되는 것을 확인했습니다.
해당 필드가 true로 변경되었음에도 불과하고 resource 서버에 동일한 토큰으로 요청을 보내도 정상적으로 동작하고 있는 것을 확인했는데요.
jwtToken 방식의 경우에는 토큰 검증시 최초에만 jwkSet을 가져오기 위해 한번만 authorization server를 호출하고 이후에는 내부적으로 jwtDecoder를 사용해 검증하는 것으로 보입니다.
결론적으로 jwtToken을 사용할때는 oauth2/revoke를 통해 meta.invalidated 값과 무관하게 토큰 만료 전까지는 지속적으로 접근이 가능한 것으로 보이는데요.
제가 이해한 흐름이 맞을까요?
답변 1
1
음
revoke 된 토큰은 인가서버에서는 더 이상 사용할 수 없을 것입니다.
즉 revoke 된 토큰을 다시 인가서버에 접근해서 어떤 자원을 가지고 오고자 할 때는 분명 오류가 발생할 것입니다.
질문하신 경우는 인가서버가 아니라 리소스 서버인데 리소스 서버는 revoke 토큰에 대해 알지 못합니다. 해당 토큰이 meta.invalidated 가 true 인지는 알 방법이 없고 단지 인가서버로 부터 키를 받아서 유효성 검사를 통해서 토큰의 사용여부를 판단할 뿐입니다.
그래서 토큰을 revoke 하게 되면 인가서버에서는 아무런 쓸모없는 무용지물이므로 공격자가 탈취하더라도 상관없게 됩니다.
이 흐름을 리소스 서버에도 적용하기 위해서는 revoke 된 토큰인지 아닌지를 요청시마다 opaque 토큰 검사를 통해 알아낸 다음 후속처리를 하는 식으로 구현해야 합니다.