OAuth
✅ 인증을 중개해 주는 메커니즘으로 보안된 리소스에 액세스 하기 위해 클라이언트에게 권한을 제공공하는 프로세스를 단순화하는 프로토콜
위와 같은 오늘의 집이라는 새로운 서비스에서 SNS 를 이용하여 로그인을 하려고 한다. 이때 이미 사용자 정보를 가지고 있는 웹 서비스(페이스북, 카카오톡, 네이버 등)에서 사용자의 인증을 대신해주고, 접근 권한에 대한 토큰을 발급한 후 이를 이용해서 서버에서 인증이 가능해진다.
➡️ 유저의 민감한 정보가 직접 Application 에 노출될 일이 없어 인증 권한에 대한 허가를 미리 사용자에게 구하고 사용자는 원하는 정보를 직접 선택할 수 있기(권한 영역을 설정) 때문에 더 쉽고 안전하게 서비스를 이용할 수 있다.
OAuth 인증 방식
Implicit Grant Type, Authorization Code Grant Type, Refresh Token Grant Type 에서 공통적으로 갖는 Grant Type는 Authorization Server 에서 Access Token 을 받아오는 방식을 말한다.
Implicit Grant Type
- 사용자가 Application 에 접속한다.
- Application 에서 Authorization Server 에 인증을 요청한다.
- Authorization Server 에서 인증 유효 검사를 한다.
- 검사가 성공적이라면 Authorization Server 에서 액세스 토큰을 발급하여 Application 에게 전달한다.
- 다시 Application 은 전달받은 액세스 토큰을 담아 Resource Server 로 사용자의 정보를 요청한다.
- Resource Server 는 액세스 토큰 유효 검사를 한다.
- 검사가 성공적이라면 Application 에 사용자 정보를 전달한다.
➡️ 기존 서비스에 로그인만 되어 있다면 새로운 서비스에게 바로 액세스 토큰을 내어줌으로써 보안성이 떨어진다.
Authorization Code Grant Type
- 사용자가 Application 에 접속한다.
- Application 에서 Authorization Server 에 인증을 요청한다.
- Authorization Server 에서 인증 유효 검사를 한다.
<span style="background:#fff5b1"4. 검사가 성공적이라면 Authorization Server 에서 Authorization Code 을 발급하여 Application 에게 전달한다.
- 다시 Application 은 Authorization Server 로 전달받은 Authorization Code 을 전달한다.
- Authorization Server 에서 Authorization Code 인증 유효 검사를 한다.
- 검사가 성공적이라면 Authorization Server 에서 액세스 토큰을 발급하여 Application 에게 전달한다.
- 다시 Application 은 전달받은 액세스 토큰을 담아 Resource Server 로 사용자의 정보를 요청한다.
- Resource Server 는 액세스 토큰 유효 검사를 한다.
- 검사가 성공적이라면 Application 에 사용자 정보를 전달한다.
➡️ Implicit Grant Type 에서 Authorization Code 를 사용한 인증단계를 추가하므로써 비교적 더 안전해졌다. 그렇지만 액세스 토큰이 만료되었을 때, 매번 이 과정을 거쳐서 액세스 토큰을 재발급 받기는 사용자 환경에 있어 번거롭게 된다.
Refresh Token Grant Type
- 사용자가 Application 에 접속한다.
- Application 에서 Authroization Server 에 리프레시 토큰을 전달한다.
- Application Server 에서 리프레시 토큰 유효 검사를 한다.
- 검사가 성공적이라면 Application 에 액세스 토큰을 전달한다.
- 다시 Application 은 전달받은 액세스 토큰을 담아 Resource Server 로 사용자의 정보를 요청한다.
- Resource Server 는 액세스 토큰 유효 검사를 한다.
- 검사가 성공적이라면 Application 에 사용자 정보를 전달한다.
➡️ Authorization Code Grant Type 에서 액세스 토큰 재발급 과정 반복으로 인한 사용자 편의성이 감소를 해결하기 위해 액세스 토큰을 발급할 때 리프레시 토큰을 같이 발급해준다.