인프런 커뮤니티 질문&답변
클라이언트에서 userinfo 엔드포인트 호출 시 질문
해결된 질문
작성
·
155
·
수정됨
0
안녕하세요
강의 초반에 oauth2Login api를 사용하여
클라이언트에서 token 요청 후 scope email, profile 이렇게 userinfo 엔드포인트 요청 시
인가 서버에서 해당 요청을 받아서 리소스 서버에게 토큰 검증을 맡기고 검증을 성공하게 되면 리소스 서버에 저장된 사용자 정보를 바로 클라이언트에게 전송하나요? 아니면 다시 인가서버로 전송하나요?
만약 scope에 openid가 포함이 안되어 있다면 인가 서버에서
토큰 검증을 수행 후 사용자 정보를 안주는 거 같은데 우리가 보통 사용하는 google, 카카오 네이버 이런 거는 포함 안 시켜도 줬는데..
또 강의 초반에는 키클록을 사용했는데 이건 키클록 구현과는 좀 틀린가요?
답변 2
1
네
인가서버가 리소스서버에게 토큰 검증을 하고 나서 사용자정보를 인가서버에서 클라이언트로 반환합니다
리소스 서버는 단지 토큰을 검증하는 역할을 합니다
물론 리소스 서버에서 기타 다른 정보를 가져와서 줄 수도 있습니다
이건 표준적으로 정해진 규칙이라기보단 스프링에서 정한 흐름이라 보시면 됩니다
그리고 openid 같은 경우 글로벌한 서비스 업체에서는 기본적으로 설정된 경우가 있습니다
구글이 한 예입니다
카카오는 전달이 되어야 하는 걸로 알고 있는데 현재는 정책이 바뀌었는지 잘 모르겠습니다
이건 서비스 프로바이더 업체마다 차이가 있습니다.
인가서버가 사용자 정보를 리소스 서버로부터 가져올 수도 있고 자체 서버에서 관리할 수도 있습니다.
그리고 리소스 서버에서도 토큰에 대한 셀프 검증이 가능하기 때문에 반드시 인가서버를 거쳐 갈 필요는 없습니다.
리소스 서버에서 토큰에 대한 키값을 인가서버로부터 받아서 처리할 수 있기 때문입니다.
강의를 보시면 JWK 와 관련된 내용이 나와 있으니 참고해 주시기 바랍니다.
0
안녕하세요, 인프런 AI 인턴입니다.
hoonseung님이 질문하신 내용은 OAuth 2.0과 OpenID Connect(OIDC)에서의 토큰 검증과 사용자 정보 전달 과정에 관한 것입니다. 관련된 개념들을 조금 더 명확히 이해할 수 있도록 설명드리겠습니다.
OAuth2의 토큰 검증 과정에서는 인가 서버(Authorization Server)와 리소스 서버(Resource Server)가 주로 등장하며, scope에 따라 특정 정보에 접근할 수 있습니다.
일반적인 OAuth2 Flow:
- 클라이언트가 사용자 인증: 최초에 사용자가 로그인을 하면, 인가 서버가 클라이언트에게 Access Token을 발급합니다.
- 클라이언트의 요청과 토큰 검증: 클라이언트는 이 Access Token을 사용하여 리소스 서버에 저장된 사용자 정보에 접근하려 합니다.
- 리소스 서버가 토큰 검증: 리소스 서버는 인가 서버에 토큰 검증을 요청할 수 있으며, 인가 서버가 토큰을 검증하면, 리소스 서버는 사용자 정보를 클라이언트에게 전송합니다.
OIDC의 Flow:
- scope에 openid 포함 시:
OIDC에서는scope=openid가 포함되었을 때, 인가 서버가 ID Token을 발급합니다. ID Token은 클라이언트에게 바로 전달되며, 여기에는 사용자의 인증 정보가 포함되어 있습니다.
ID Token은 사용자의 정보를 포함하여 클라이언트에게 제공됩니다. 따라서, 추가적인 특정 정보(claim)를 포함해야 할 경우, userinfo 엔드포인트를 별도로 호출하여 추가 정보(예: 이메일, 프로필 등)를 얻을 수 있습니다.
정리:
- Access Token은 주로 리소스 서버와의 통신에 사용되어, 리소스 서버는 이를 검증한 후 사용자 정보를 클라이언트에게 반환합니다.
- ID Token은 OIDC 인증 흐름의 결과로 클라이언트에게 직접 제공되며, 주로 인증 정보를 포함합니다.
호스트님이 좀 더 구체적인 프로세스를 파악하고 있으므로, 다음 URL에서 실제 구현과 관련된 비슷한 질문들을 확인해 보세요. 아래 링크들은 Oauth2와 OIDC의 토큰 처리 과정에 대한 개념을 더 깊이 이해하는 데 도움이 될 것입니다:
- OAuth2 인가서버로부터 access token 발급 후 저장 관련 질문
- oidc userinfo 확인 시 오류가 납니다.
- Client Credentials 권한 부여 방식에서 사용자 정보 획득 방법 문의
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
강의시점에 인가서버에 userinfo 엔드포인트 요청 시 openid scope를 포함하지 않으면 사용자 정보를 주지 않는다고 하였는데 이 부분은 현재 최신 버전에는 개선되었나요?






넵 구글은 보니까 openid가 필수 같고 카카오는 OIdc를 사용하면 보내라고 명시 되어있는 거 보면은 필수는 아닌 거 같네요.. 또 리소스 서버라고 해서 리소스를 애가 가지고 있는 줄 알았는데 인가 서버가 그럼 사용자 정보를 가지고 있는건가요?
강의 마지막 예제에서는 클라이언트에서 rest 클라이언트를 이용해서 리소스 서버에 데이터를 요청하고 바로 받더라구요. 이 부분은 이유가 있나요?
우리가 사용하는 카카오, 네이버 구글 이런 서비스도 인가서버에 유저 정보가 포함되어 있고 리소스 서버는 단지 토큰 검증용으로 쓴다는거죠?