기존 인증 방식은 모바일 앱 또는 여러 앱이 SSO로 공유 데이터베이스를 사용하게 된다면 매우 제한적이게 된다.
앱을 사용하고 있는데 Google 비밀번호를 입력하세요 라는게 뜨면 이를 어떻게 신뢰할 수 있을까?
구글에 합법적인 앱에서는 구글의 비밀번호를 요구하지 않는다.
또는 입력받은 비밀번호를 앱 어딘가에 기록해놓을 수도 있다.
이는 매우 심각한 문제이다.
만약 로그인하여 모든 앱이 사용자 정보를 사용한다면 어떤 앱이 API를 사용하는지 알 수 없다.
해당 요청은 모든 앱에서 동일하게 보여 내 앱이 뭔지 알 수 없다.
만약 multi-factor 기능을 추가하고 싶다면 모든 앱에 추가를 요청해야 한다.
이것은 확장성이 떨어진다.
OAuth를 사용하는 모든 애플리케이션은 사용자를 인가 서버에 로그인하게 한 다음 앱으로 토큰과 함께 리다이렉트 시킨다.
이는 실제로 애플리케이션을 떠나 비밀번호를 입력하는 것이다.
이는 애플리케이션이 사용자의 비밀번호를 보는 문제를 피할 수 있다.
신뢰할 수 없는 제 3자에게도 보안을 제공하는 것이다.
mfa를 추가하는 경우에도 OAuth앱에서만 변경하면 되기 때문에 앱을 변경할 필요가 없다.
OAuth는 API 인가에 대해 설계되었다.
이 뜻은 API에 접근하는 권한만 필요하고 애플리케이션은 사용자가 누구인지 알 필요가 없다.
애플리케이션이 동작하기 위해서는 사용자를 알아야 하므로 OIDC는 OAuth의 확장으로 OAuth를 기반으로 사용자 신원 정보를 추가한다.
OAuth를 기반으로 OIDC 데이터 흐름을 파악할 수 있다.
액세스 토큰은 OAuth 앱으로부터 발급받고 만료일과 권한이 포함되어 있다.
ID 토큰은 OIDC 앱으로부터 OAuth 기반으로 사용자 신원 정보를 추가한다.
액세스 토큰에는 만료일과 권한이 포함되어 있다.