작성
·
16
0
안녕하세요.
질문 먼저 요약하자면,
id token 에 scope에 포함된 유저 정보가 같이 포함되어 넘어오는게 일반적인지, idtoken 검증만 진행한 뒤 액세스토큰으로 따로 조회하는게 일반적인지 궁금합니다.
1년쯤 전에, 소셜 로그인의 흐름을 이해해보기 위해 스프링 시큐리티 없이 카카오, 네이버, 구글 로그인을 적용해본 적이 있습니다.
원래 카카오와 구글은 OIDC를 지원했고, 네이버는 OIDC가 없었는데 최근에 추가되었더라구요.
그래서 OAuth2 스펙으로만 구성된 네이버 로그인 코드를 OIDC를 적용한 코드로 수정하고 있었는데.. 그러다가 의문이 생겨서 질문을 드리게 되었습니다.
저는 여태까지 필요한 유저 정보의 scope를 "openid" 항목과 함께 프로바이더에 전달하고,
id token을 프로바이더로부터 전달받고, 그걸 검증한 뒤 id token에 담긴 유저 정보를 사용하면 된다고 생각하고 있었습니다.
실제로 카카오와 구글은 유저의 email 정보가 id token 페이로드에 담겨있었구요.
네이버 역시 https://nid.naver.com/.well-known/openid-configuration 의 메타데이터 중 scopes_supported 항목을 확인했을때 profile이라는 scope가 존재해서, 코드 요청할때 scope=openid+profile 을 파라미터로 전달했습니다.
그런데 id token을 확인해도 유저의 정보가 나오지 않더군요.
처음에는 단순히 네이버가 이 부분을 미구현했나? 생각을 했는데, 좀 찾아보니 id token에는 최소한의 신원만을 포함하고 세부적인 프로필은 따로 조회하는게 맞다는 말도 있더라구요.
그래서 질문을 올리게 되었습니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
암차님의 질문은 OIDC의 ID 토큰과 액세스 토큰 사용에 관한 것입니다. 이 두 토큰의 역할과 일반적인 사용 방식을 명확히 이해하는 것은 중요합니다.
ID 토큰은 주로 사용자 인증을 위해 사용됩니다. 여기에서의 인증은 사용자가 누구인지 확인하는 절차로, ID 토큰은 기본적인 사용자 정보(claims)만 담고 있습니다. ID 토큰에 포함되는 정보는 보통 사용자의 식별자(예: sub 또는 email)와 같은 최소한의 식별 정보입니다.
한편, 액세스 토큰은 주로 권한 부여를 의미합니다. 즉, 사용자가 리소스 서버에 접근할 때 필요한 권한을 부여하는 역할을 하는데, 이를 통해 사용자 정보나 기타 리소스를 요청할 때 사용됩니다.
ID 토큰 검증 후 인증: 클라이언트는 ID 토큰을 검증하여 사용자가 인증되었음을 확인합니다. ID 토큰 자체에는 기본적인 사용자 정보만 포함되며, 이는 주로 사용자의 신원을 확인하는 용도로 사용됩니다.
액세스 토큰 사용하여 추가 정보 획득: 세부적인 사용자 프로필 정보가 필요할 경우, 클라이언트는 액세스 토큰을 통해 프로바이더의 사용자 정보 엔드포인트(userinfo endpoint)를 호출하여 추가 정보를 얻습니다.
네이버와 같은 경우, ID 토큰에 최소한의 정보만 포함시키는 것이 일반적인 것 같습니다. 이것은 보안 및 개인정보 보호 관점에서도 사용자에 관한 민감한 세부 정보를 직접 포함하지 않는 것이 유리합니다.
관련 추가 자료로 OAuth 2.0과 OpenID Connect의 차이점을 설명한 다른 질문 링크를 참고하시면, ID 토큰과 액세스 토큰의 차이점 및 사용 방식에 대한 이해를 돕는 데 도움이 될 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.