id_token과 access_token의 개념에 대하여
1003
작성한 질문수 10
안녕하세요.
scope에 openid를 포함하면 id_token을 발급 받을 수 있는데요.
이 id_token과 access_token의 정확한 사용 용도가 헷갈립니다.
제가 이해하는 바가 맞는지 확인 부탁드립니다.
인증 : 사용자가 유효한 사용자인지 판단하는 것
인가 : 사용자가 해당 기능을 사용할 권한이 있는지 판단하는 것
사용자 인증 관점에서 인증이 통과(scope에 openid가 있는 경우)하면 access_token과 id_token을 받습니다.
인증만이 필요한 경우라면 id_token에 있는 사용자 정보로 확인하면 되나요?
만약 제가 개발한 서비스가 있고 사용자별 권한의 차등이 없는 경우 세션 없이 인증을 유지하기 위해서는 로그인 후 발급받은 이 id_token을 들고 다니면서 id_token값으로 토큰의 값 유무와 만료시간 등 으로 유효 사용자를 확인하면 되나요?
토큰의 값으로만 확인해도 되는지 아니면 jwt에서 제공되는 어떤 validation 함수같은걸로 우선 위변조를 확인한후 위변조가 없다는것이 확인된 후에 값을 비교해서 사용하면 되는지 궁금합니다.
그리고 만약 위의 인증을 access_token 으로 한다면 access_token은 원래 태생이 인가(권한)이기 때문에
userinfo 엔드포인트를 호출하여 사용자 정보를 가져온 후에 이 사용자 정보로 사용자가 누구인지 인증을 확인하는것이죠?
저는 access_token없이 id_token만으로도 userinfo 엔드포인트를 호출 할 수 있는지 확인하기 위해
postman에서 id_token을 bearer 토큰으로 호출했는데 401로 id_token 만 가지고는 userinfo 정보를
확인이 안되더라고요. 이게 맞는건가요?
아시는 고수님들의 답변 기다리겠습니다.
답변 2
1
안녕하세요, 인프런 AI 인턴입니다. aanicall님의 질문에 대해 설명드릴게요.
OAuth 2.0에서 id_token과 access_token은 서로 다른 목적을 갖고 있어요.
id_token은 인증에 관련된 정보를 담고 있습니다. 사용자가 누구인지, 즉 사용자의 신원을 알려주는 토큰이에요. OpenID Connect(OIDC)를 사용해 OAuth 2.0 위에서 인증을 구현할 때 발급되며, 이 토큰 안에는 사용자의 식별 정보가 포함되어 있습니다.id_token은 주로 클라이언트에서 사용자가 로그인한 것을 확인하기 위해 사용됩니다.access_token은 인가(권한) 에 관련된 정보를 담고 있습니다. 이 토큰을 사용하여 리소스 서버(예: API 서버)에 접근할 때 해당 사용자가 접근 권한을 가지고 있는지를 검증할 수 있게 해요. 즉,access_token을 이용하여 리소스 서버에서 보호되고 있는 데이터에 접근할 수 있습니다.
id_token만으로 사용자 인증을 유지하는 상황을 설명하셨는데, 일반적으로 이 토큰은 인증 정보를 제공하는 용도로 사용됩니다. 사용자의 인증 상태를 유지하고 싶다면, id_token을 안전하게 보관하고 있으면서 유효성 검증(예를 들어, 서명 검증 등)을 통해 사용자가 로그인 상태인지 확인할 수 있어요.
그러나 userinfo 엔드포인트에 접근하는 경우 대부분 access_token이 필요합니다. 왜냐하면 userinfo 엔드포인트는 사용자에 대한 추가적인 정보를 요청하는 곳이기 때문에, 사용자의 정보에 접근하기 위한 적절한 권한(access_token)이 필요하기 때문이에요. id_token으로는 userinfo 엔드포인트에 접근할 수 없는 것이 일반적입니다.
따라서 aanicall님께서 테스트해보신 것처럼 id_token을 이용하여 userinfo 엔드포인트를 호출했을 때 401 오류가 발생한 것은 정상적인 동작입니다. 사용자의 추가 정보를 요청하려면 access_token을 사용해야 해요.
질문하신 내용에 따라, 인증과 인가 개념에 대해 정확히 이해하고 계시고, id_token과 access_token의 사용 목적과 차이점을 잘 파악하고 계세요. OAuth 2.0과 OpenID Connect에 대한 더 자세한 내용을 원하신다면 공식 문서나 추가 자료를 확인하시는 것도 좋을 것 같습니다.
0
대부분 설명하신 내용이 맞습니다.
id_token 으로만 인증을 받아도 됩니다.
인증 전용 프로토콜로 생성된 토큰이기 때문입니다.
그리고 id_token 은 이미 사용자 정보를 자기고 있기 때문에 userInfo 를 가지고 오지 못합니다.
그건 AccessToken 의 역할입니다.
authorization-server 라이브러리 질문이 있습니다.
0
75
1
loadUser 중 Missing attribute 'preferred_username' in attributes 에러 발생
0
76
2
JWT 조회 에 대한 질문
0
70
1
password grant 방식 에러 응답
0
88
3
FormLoginConfigure에서 생성하는 필터
0
76
2
현업에서 springboot를 3.5.5 를 사용해서 공부중인데...
0
282
2
Jdbc 관련 강의 및 깃헙 문의
0
76
1
OAuth2AuthorizedClient 이해 및 활용 강의 내용 질문
0
208
1
UserInfo 엔드포인트 요청 실습
0
73
1
RFC 문서에서의 AccessToken 발급 방식 궁금한점
0
150
1
강의자료.zip 를 다운로드 받았는데 압축이 풀리지 않습니다. 확인 부탁드려요
0
138
2
OIDC SSO 관련 질문 입니다.
0
130
1
AuthenticationEntryPoint 강의 누락 문의
0
121
1
cors설정방법
0
115
1
jwt decoder 토큰 검증 시 질문
0
221
1
클라이언트에서 userinfo 엔드포인트 호출 시 질문
0
184
2
JOSE 구성요소의 api에 관한 질문
0
140
2
스프링 부트 3버전으로 따라가시는 분들 참고하세요
1
526
1
CustomOAuth2AuthenticationFilter 구현 중 질문
0
145
2
AuthenticationManager 생성시점
0
117
1
FormLogin과 Oauth2Client 둘 중 사용하는 시점
0
127
1
postman userinfo 엔드포인트 질문
0
134
2
강의 수강신청하고 듣기 전입니다 질문있습니다.
0
113
1
인증 코드를 통해 발급 받은 토큰의 관리
0
198
1





