서드파티의 JWT 간접 검증

이 기법에 대한 정확한 용어는 모르겠다. 일단 가칭이다.



전제

JWT 기반의 토큰 인증 시스템을 포함한 메인 서버(혹은 인증 서버)가 있다고 가정한다.

그리고 별도의 조직에서 서버 관리와는 별도로 간단한 서브시스템을 만들고 싶다.
예를 들면, "User 단위로 특수한 정보들을 저장하는 Client용 Key-Value API" 같은거 말이다. user action log 같은 덜 중요한 데이터들. 메인 서버에서 관리 책임을 가져갈 필요가 없는 것들.

하지만 그와 동시에 올바르게 인증된 유저에게 한해서만 기능을 제공해야 한다.




방법

앞서 말했듯이, 관리 책임을 별도로 가져가고 싶기 때문에 메인 서버에 기능을 추가하거나, JWT 비밀키를 공유하게 하고 싶지도 않다. 그러면 어떻게 할 수 있을까?

생각보다 그리 어렵지만은 않다.
토큰이 유효하다는 것을 검증할 수 있는 API만 있으면, 토큰을 전달받아서 검증하도록 구성할 수 있다.

어차피 클라이언트는 항상 인증토큰을 들고있을테니, 그걸 받아서 Verify에서 올바른 응답이 나온다면 유효한 접근이고, Verify가 실패한다면 당연히 올바르지 않은 접근일테니 차단하면 된다.

Token Verify API 자체만 안정적으로 잘 유지한다면 이런 방식을 통해서 꽤 유연한 확장이 가능하다.
토큰 기반 인증의 장점 중 하나라 할 수 있겠다.

인증 서버를 아예 분리할 때도 이런 접근법을 취할 수 있을 것이다.
어떻게 보면 우리가 Google, Naver, Kakao 같은 서드파티 서비스로 로그인 연동(SSO)을 구현하는 방법과 비슷하다.