기존 세션기반 인증에서는 서버에 데이터를 저장시켰다면,
클라이언트에서 인증 정보를 보관하는 방법으로 , 암호화한 데이터,정보를 클라이언트에 저장한다. 그리고 서버에게 보여준뒤 토큰 (서비스를 이용할수 있도록 증명하는 인증서같은것) 을받는다.
엑세스 토큰 (Access Token) , 리프레시 토큰 (Refresh Token)
클라이언트가 처음 인증을 받을때 두 토큰을 받는다. 토큰은 유효기간이 있는데,
엑세스 토큰은 정보에 권한 부여를 할때 인증하는 토큰으로 불의적인 일을 방지하기위해 유효기간이 짧다.
유효기간이 지나면 로그인 해서 다시 토큰을 받을 필요없이 리프레시 토큰으로 새로운 엑세스 토큰을 발급받는다.
구조
header.payload.signature
Header
: 토큰의종류 , 어떤 알고리즘으로 암호화를 할것인지 담고있다.
Payload
: 유저의 정보가 담겨있다. 권한이 부여된 내용, 유저의 개인정보 등.
Signature
: 정보(payload) 를 서버의 비밀키와 헤더에서 지정한 알고리즘을 사용하여 암호화한다.
클라이언트에서 id/pw를 담아 서버에게 로그인 요청을한다.
서버는 id/pw가 일치하는지 확인하고 클라이언트에게 넘겨줄 암호화된 토큰을 생성한다.
서버가 토큰을 넘겨주면 클라이언트는 토큰을 저장한다.
클라이언트가 http 헤더 나 쿠키에 토큰을 담아서 서버에게 보낸다. 서버가 토큰을 받아 해독한후 옳은경우 클라이언트 요청을 처리해 응답을 보내준다.
무상태성(Statelessness) & 확장성 (Scalability)
안전하다
어디서나 생성가능하다.
권한부여에 용이하다.
OAuth 2.0 은 인증을 위한 표준 프로토콜의 종류로, 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단이다.
(타 서버를 구글,페이스북,네이버와 같은 소셜 로그인하는것)
서비스를 구현하는 개발자도 신규 회원가입이나 회원 관리를 신경쓰지 않아도 되기 때문에 사용자와 기업 모두 소셜 로그인을 선호하고 있는 추세