회원 시스템을 구현할 때 많이 접하는 단어들입니다. 이 두 토큰은 비슷하지만 다릅니다. 한 10년전부터 회원 시스템을 만들 때 social login이라는 것을 많이 사용하게 되었습니다. 서비스가 자체적으로 회원 시스템을 만들지 않고 기존에 많이 갖고 있는 계정을 연결해서 사용하는 방법입니다. 사용자들은 굳이 새로 가입하지 않아서 좋고 더 튼튼하고 안전한 계정을 사용할 수 있어서 좋습니다.
이미 이를 위한 국제 표준이 있는데 OIDC와 OAuth입니다. OIDC는 Open ID Connect인데 이게 계정과 서비스를 연결하게 해 주는 것입니다. 일종의 신분증 개념이죠. OAuth는 Open Authorization인데 OIDC의 축소판이며 사용자의 권한을 정해주는 것이죠. 일종의 방문증 개념입니다.
ID Token
기존에 사용자들이 갖고 있는 계정을 새로운 서비스에 연결하기 위해서 발행하는 토큰입니다. 계정 서비스를 제공하는 주체가 이 계정을 사용하고 싶은 서비스에게 내어 주는 토큰이고 이 토큰은 JWT 형태로 발행됩니다. 그리고 그 내용은 투명해서 누구든지 수학적으로 복호화해서 내용을 확인할 수 있습니다. 이 때 사용되는 표준이 OIDC입니다. 세계적으로 ID Token을 제공하는 주체가 여럿 있는데 대표적으로 Google, Microsoft, Facebook, Apple, Twitter 등이 있습니다. 카카오 계정도 가능하죠.
Access Token
이 토큰은 일종의 방문증 같은 개념입니다. 뭔가를 할 수 있는 권한에 대한 것입니다. 이것에 대한 프로토콜은 OAuth이고 최신의 버전은 2라서 보통 OAuth2라고 말합니다. 이 토큰은 주로 api를 사용할 때 제시합니다.
요즘 만드는 서비스들은 자체적인 회원 시스템을 만들지 않고 주요한 계정에 의지해서 운영합니다. 이런 social login을 공급하는 주체 중 가장 일반적인 주체는 구글입니다. 구글이 만든 안드로이드 폰을 사용하려면 구글 계정이 필요하기 때문입니다. 지금 세계적으로 문명인이라면 이미 구글 계정을 가지고 있다고 믿어도 될 것입니다. 그래서 구글 계정과 연결된 ID Token을 활용하는 것을 익힐 필요가 있습니다.