모두 인증 및 권한 부여를 위한 프로토콜 이라고 한다.
하지만 각각의 목적과 동작 방식이 다른데요.
밑에 자세하게 알려드리겠습니다.
1. OAuth 2.0 (Open Authorization 2.0)
OAuth 2.0은 다른 앱이나 웹사이트가 사용자의 정보나 리소스에 접근할 수 있도록 허락하는 방법이에요. 이때 중요한 점은, 사용자는 자신의 비밀번호를 다른 앱과 공유하지 않고도 정보를 공유할 수 있다는 점입니다.
예를 들자면, 당신이 어떤 앱(예: 피트니스 앱)을 사용할 때, 이 앱이 당신의 구글 계정에 있는 이메일 주소, 이름, 프로필 사진 등을 가져와서, 그 정보를 앱 내에서 사용할 수 있도록 하고 싶을 수 있어요. 이때 피트니스 앱은 구글에 요청을 하여, 구글에서 허락을 받으면 이메일과 같은 정보를 얻을 수 있게 됩니다.
- 이때 구글 비밀번호는 앱에 알려주지 않아요.
- 대신 액세스 토큰(access token)을 받게 되는데, 이 토큰을 사용해 피트니스 앱은 구글 계정에 있는 정보(이메일, 이름 등)에 접근할 수 있게 되는 겁니다.
결국 OAuth 2.0은 "내 정보를 다른 앱이 사용해도 되는지, 그 앱이 내 정보를 어떻게 사용할 수 있는지"를 제어하는 방식이에요. 사용자는 이 앱에 대해 "이 앱이 내 구글 계정 정보에 접근하는 것을 허락"할 수 있는 거죠.
Tip!!
OAuth 2.0의 기본 동작에서는
- 사용자 인증 : OAuth 2.0은 사용자가 직접 로그인하지 않고, 외부 서비스(예: 구글, 페이스북, 트위터 등)를 통해 인증을 수행할 수 있게 합니다.
- 토큰 발급: OAuth 2.0은 인증이 완료되면, 리소스 서버에 접근할 수 있는 액세스 토큰을 발급합니다. 이 토큰은 사용자의 자격 증명을 포함하지 않고, 애플리케이션이 해당 리소스에 액세스하는 데 필요한 권한만 포함합니다.
- 권한 부여: 애플리케이션은 이 액세스 토큰을 사용하여 서버에서 리소스를 요청합니다. 토큰을 사용하면 애플리케이션은 사용자의 비밀번호나 개인정보를 알지 않고도 리소스에 접근할 수 있습니다.
2. OpenID Connect (OIDC)
OIDC는 OAuth 2.0을 바탕으로, 여기에 사용자 인증(이 사람이 정말 그 사람인지 확인하는 절차)을 추가한 프로토콜이에요. OIDC는 OAuth 2.0의 기능에 "이 사람이 진짜 그 사람인가?"를 검증하는 기능을 덧붙인 거죠.
OAuth 2.0과 OIDC의 차이점에 대해서 설명할께요.
- OAuth 2.0은 주로 "리소스 접근"을 제어하는 데 사용되며, 단지 사용자가 어떤 리소스에 접근할 수 있는지 허락하는 역할을 합니다. 예를 들어, 사용자가 다른 앱에 구글 이메일을 공유할 때, 그 앱은 이메일을 가져올 수 있게 됩니다.
- 반면, OIDC는 이 과정에서 "사용자의 신원"을 확인할 수 있게 해줘요. 즉, 앱이 "이 사람이 정말 구글 계정의 주인인지"를 알아볼 수 있도록 해주는 거죠.
OIDC는 OAuth 2.0에서 사용하는 액세스 토큰 외에도, ID 토큰이라는 걸 추가로 발급합니다. 이 ID 토큰에는 사용자의 인증 정보가 들어있어요. 예를 들어, 사용자의 이름, 이메일, 고유 ID 등을 담고 있기 때문에, 앱은 이 토큰을 통해 "이 사람이 내 앱에 로그인한 사람"인지 확인할 수 있어요.
예시로 다시보자면 만약 당신이 어떤 앱에 로그인할 때 "구글 계정으로 로그인" 버튼을 누르면, 그 앱은 구글에 인증을 요청하고, 구글은 당신이 정말 그 구글 계정의 주인인지 확인합니다. 이때, 구글은 ID 토큰을 발급하고, 이 토큰을 통해 앱은 당신이 맞는지 검증할 수 있게 돼요.
Tip!
OIDC의 주요 특징!
- 인증: OAuth 2.0은 리소스에 대한 권한 부여만 다루고, 사용자 인증을 직접적으로 다루지 않습니다. 반면, OIDC는 OAuth 2.0을 기반으로 하여 사용자 인증 기능을 추가한 프로토콜입니다. OIDC는 사용자가 누구인지 확인하고, 이를 통해 ID 토큰을 발급합니다.
- ID 토큰: OAuth 2.0에서는 액세스 토큰만 발급되지만, OIDC에서는 액세스 토큰 외에 ID 토큰을 발급합니다. ID 토큰은 사용자의 인증 정보를 포함하고 있으며, 이를 통해 애플리케이션은 사용자가 실제로 누구인지 확인할 수 있습니다.
- 확장성: OIDC는 사용자의 프로필 정보와 같은 추가적인 데이터를 요청할 수 있는 기능을 제공합니다. 예를 들어, 사용자의 이름, 이메일 주소 등을 제공할 수 있습니다.
자!! 이렇게 풀어서 얘기하면 저야 편하겠지만 보는 사람이나 듣는 사람에게는 어려울수도 있으니까 요약해서 알려드릴께요!
- OAuth 2.0: "내 정보에 접근할 수 있도록 다른 앱에 권한을 주는 것"입니다. 즉, 앱이 내 구글 이메일을 볼 수 있게 허락할 수 있지만, 그 앱이 내가 맞는 사람인지는 확인하지 않아요.
- OIDC: OAuth 2.0에 인증 기능을 더한 것이에요. 즉, 앱이 내 구글 계정을 통해 "이 사람이 정말 그 계정의 주인인가"를 확인하고, 내 신원을 확인한 뒤, 그 정보를 앱에서 사용할 수 있게 해주는 거죠.
진짜 마지막으로 실생활의 예시로 두고 설명해드릴께요!
- OAuth 2.0을 사용한 예:
당신이 카카오톡에서 구글 사진을 가져오려고 할 때, 구글이 카카오톡에 "사진에 접근할 수 있냐?"고 묻고, 당신이 "허락"을 누르면 카카오톡이 당신의 구글 사진에 접근할 수 있게 됩니다. 이때, 카카오는 당신의 비밀번호를 모르고, 액세스 토큰을 통해서만 사진에 접근할 수 있어요.
- OIDC를 사용한 예:
당신이 구글 계정으로 웹사이트에 로그인하려고 할 때, 구글은 당신이 실제로 그 계정의 주인인지를 확인한 후, ID 토큰을 보내줍니다. 웹사이트는 이 ID 토큰을 통해 "이 사람이 정말 그 구글 계정의 주인"인지 확인할 수 있게 됩니다.
결론적으로는
OAuth 2.0은 "정보에 대한 접근 허용"에 집중하고, OIDC는 "인증"을 통해 사용자 신원 확인을 추가하는 기술이에요.
'TIL' 카테고리의 다른 글
Flutter의 빌드 모드에는 무엇이 있는지 알아보자 (0) | 2025.01.10 |
---|---|
Flutter에서 패키지와 플러그인은 무엇인가요? (0) | 2025.01.09 |
LeetCode 643: Maximum Average Subarray I (1) | 2024.12.13 |
LeetCode 문제 1232 (1) | 2024.11.25 |
Train_app 개인과제에 대한 트러블슈팅 및 회고 (0) | 2024.11.20 |