OAuth에 토큰 유형이 다른 이유

OAuth에 토큰 유형이 다른 이유

현재 oAuth를 처리하기 위한 코드를 작성 중입니다(Azure Graph API를 사용하지만 Google API도 비슷하다고 생각합니다).

API 호출을 하려면 수명이 약 1시간인 액세스 토큰이 필요합니다. 액세스 토큰을 얻으려면 먼저 사용자가 내 앱 사용을 승인하도록 해야 합니다. 그러면 수명이 약 10분인 인증 코드가 제공됩니다. 액세스 토큰을 받는 동시에 일반적으로 수명이 90일인 새로 고침 토큰도 얻을 수 있습니다. 하지만 유효한 새로 고침 토큰을 유지하기 위해 만료되기 전에 새 새로 고침 토큰을 얻을 수 있습니다.

따라서 처리해야 할 세 가지 유형의 코드/토큰이 있습니다.

왜 이렇게 다양한 코드와 토큰이 필요한가요? 수명이 90일인 인증 코드를 제공하고 완료하면 어떨까요?

새로 고침 토큰이 만료되면 체인의 시작 부분으로 바로 돌아가서 사용자에게 다시 액세스를 요청해야 한다고 가정하는 것이 맞습니까?

답변1

왜 이렇게 다양한 코드와 토큰이 필요한가요? 수명이 90일인 인증 코드를 제공하고 완료하면 어떨까요?

인증 코드는 액세스 토큰을 전달하는 여러 방법 중 하나입니다. 이는 별도의 "단계"가 아니지만 여전히 초기 "대화형 인증" 흐름의 일부입니다. 코드를 사용하려면 OAuth2 클라이언트 비밀(또는 처음에 생성된 PKCE 챌린지)도 필요하다는 점에서 실제 액세스 토큰과 다릅니다. 이론적으로 이는 코드 자체가 가로채더라도(예: 클라이언트 측에 표시되는 리디렉션을 통해) 원래 앱에서만 이를 실제 토큰으로 교환할 수 있음을 의미합니다.

이를 사용하지 않는 다른 흐름도 있습니다. 예를 들어 "암시적 승인" 흐름을 사용하여 액세스 토큰을 직접 받을 수도 있고, OAuth에 따라 인증서를 사용하여 한 단계로 토큰을 인증하고 받을 수도 있습니다. IDP가 지원합니다.

(예를 들어 Google의 "서비스 계정"은 액세스 토큰을 얻기 위해 RSA 키 쌍을 사용하여 인증합니다. 이는 대화형 인증 흐름을 사용하지 않으므로 인증 코드가 없습니다.)

새로 고침 토큰이 만료되면 체인의 시작 부분으로 바로 돌아가서 사용자에게 다시 액세스를 요청해야 한다고 가정하는 것이 맞습니까?

예, 하지만 이를 방지하는 것이 실제로 새로 고침 토큰의 목적입니다.

한 가지 유형의 토큰(액세스 토큰)만 있는 경우 만료될 때마다 체인의 시작 부분으로 바로 돌아가야 합니다. 이는 일반적으로 다음이 있는 새로 고침 토큰을 사용하여 방지할 수 있습니다.더 길게예를 들어 액세스 토큰이 몇 시간 또는 며칠 동안 유효한 경우 새로 고침 토큰은 몇 달 또는 몇 년 동안 유효한 것이 일반적입니다.

새로 고침 토큰의 90일은 비정상적으로 짧으며 토큰을 보유하는 요점이 다소 무색하다고 말하고 싶습니다. 제 생각에는 Azure OAuth2가 훔치기 어려운 자격 증명을 통해 재인증을 강제하기 위해 특별히 그런 방식으로 설정된 것 같습니다. 장치 인증서 또는 사용자 정의 HMAC 구성표 "Windows Hello"로 사용됩니다. (반면에 Google에서 발행한 새로 고침 토큰에는 만료 시간이 전혀 없는 것 같습니다. 저는 수년간 Gmail IMAP에 액세스하는 데 동일한 토큰을 사용해 왔습니다.)

답변2

목적이 다르기 때문에 유형도 다양합니다. 이를 보유하는 쉬운 이유는 해당 정보가 손상되어 다른 목적으로 사용될 수 있기 때문입니다. 따라서 수명이 짧으면 부적절한 처리 또는 손상된 클라이언트가 여전히 나쁘지만 잠재적으로 영향을 덜 미칠 수 있습니다.

또한 무엇을 수행하는지 구분하는 것도 도움이 됩니다. 하나의 토큰은 하나의 토큰만 손에 넣으면 모든 것을 할 수 있다는 것을 의미합니다. 여러 개의 토큰을 사용하면 모든 작업을 수행할 수 있는 옵션을 선택하기가 조금 더 어려워집니다.

보다RFC 6749토큰 유형에 대한 자세한 내용은

관련 정보