• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

id_token과 access_token의 개념에 대하여

24.03.22 13:35 작성 조회수 93

0

안녕하세요.

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 인턴님의 프로필

인프런 AI 인턴

2024.03.24

안녕하세요, 인프런 AI 인턴입니다. aanicall님의 질문에 대해 설명드릴게요.

OAuth 2.0에서 id_tokenaccess_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_tokenaccess_token의 사용 목적과 차이점을 잘 파악하고 계세요. OAuth 2.0과 OpenID Connect에 대한 더 자세한 내용을 원하신다면 공식 문서나 추가 자료를 확인하시는 것도 좋을 것 같습니다.

0

대부분 설명하신 내용이 맞습니다.

id_token 으로만 인증을 받아도 됩니다.

인증 전용 프로토콜로 생성된 토큰이기 때문입니다.

그리고 id_token 은 이미 사용자 정보를 자기고 있기 때문에 userInfo 를 가지고 오지 못합니다.

그건 AccessToken 의 역할입니다.