OAuth정리

log.yunsik·2023년 11월 30일
1
post-custom-banner

기존 인증 방식은 모바일 앱 또는 여러 앱이 SSO로 공유 데이터베이스를 사용하게 된다면 매우 제한적이게 된다.

기존 인증 방식의 문제

사용자 문제

앱을 사용하고 있는데 Google 비밀번호를 입력하세요 라는게 뜨면 이를 어떻게 신뢰할 수 있을까?
구글에 합법적인 앱에서는 구글의 비밀번호를 요구하지 않는다.

또는 입력받은 비밀번호를 앱 어딘가에 기록해놓을 수도 있다.
이는 매우 심각한 문제이다.

API 문제

만약 로그인하여 모든 앱이 사용자 정보를 사용한다면 어떤 앱이 API를 사용하는지 알 수 없다.
해당 요청은 모든 앱에서 동일하게 보여 내 앱이 뭔지 알 수 없다.
만약 multi-factor 기능을 추가하고 싶다면 모든 앱에 추가를 요청해야 한다.
이것은 확장성이 떨어진다.

OAuth 해결 방식

OAuth를 사용하는 모든 애플리케이션은 사용자를 인가 서버에 로그인하게 한 다음 앱으로 토큰과 함께 리다이렉트 시킨다.
이는 실제로 애플리케이션을 떠나 비밀번호를 입력하는 것이다.
이는 애플리케이션이 사용자의 비밀번호를 보는 문제를 피할 수 있다.
신뢰할 수 없는 제 3자에게도 보안을 제공하는 것이다.
mfa를 추가하는 경우에도 OAuth앱에서만 변경하면 되기 때문에 앱을 변경할 필요가 없다.

OAuth vs OIDC

OAuth는 API 인가에 대해 설계되었다.
이 뜻은 API에 접근하는 권한만 필요하고 애플리케이션은 사용자가 누구인지 알 필요가 없다.

애플리케이션이 동작하기 위해서는 사용자를 알아야 하므로 OIDC는 OAuth의 확장으로 OAuth를 기반으로 사용자 신원 정보를 추가한다.
OAuth를 기반으로 OIDC 데이터 흐름을 파악할 수 있다.

Access Token vs ID Token

액세스 토큰은 OAuth 앱으로부터 발급받고 만료일과 권한이 포함되어 있다.
ID 토큰은 OIDC 앱으로부터 OAuth 기반으로 사용자 신원 정보를 추가한다.
액세스 토큰에는 만료일과 권한이 포함되어 있다.

post-custom-banner

0개의 댓글