정의
OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준이다. 권한 위임이 OAuth이다.
단계별 설명
고객이 카카오에 로그인 한다.
고객은 카카오에 로그인 할 때 ID, PASSWORD, SCOPE를 전달한다. (SCOPE는 따로 정리하겠다)
그럼 카카오는 최초 서명이 된 JWT를 고객에게 전달한다.
고객이 카카오에서 받은 서명을 스프링 서버에게 가져다 준다.
스프링 서버에서 고객이 카카오에서 받은 서명을 가져왔다고 해서 신뢰할 수 있는 것은 아니다. (많은 사람들이 오해하고 있는 부분!)
이게 진짜인지 아닌지 검증하기 위해서 그 서명을 가지고 카카오에 직접 가봐야된다.
스프링 서버는 고객에게 받은 토큰을 검증해야된다!
카카오가 서명한 토큰이 중요한게 아니라, 스프링 서버는 직접 카카오한테 가서 해당 토큰이 유효한지 검증해야지 OAuth가 완성이 된다.
하지만 중요한 것은, 스프링 서버는 토큰을 저장하고 있지 않기 때문에, 매번 요청할 때 마다 카카오에게 검증을 받으러 통신을 해야되는 것인가이다.
OAuth 유효성 검증이 되면 토큰을 폐기하고, 자체 토큰을 만든다.
이제 서버는 OAuth토큰이 검증이 완료되면, 서버는 OAuth토큰을 사용해서 자체제작 토큰을 생성후 OAuth 토큰을 폐기한다.
그 이후 부터는 자체제작토큰으로 서버는 사용자를 인증하면 된다.