제3의 서비스에 계정 관리를 맡기는 방식
인증 서버에서 발급받은 토큰을 이용하여 리소스 서버에 리소스 오너의 정보를 요청하고, 인증서버에게 인증을 받고, 응답받아 사용할 수 있다.
클라이언트(스프링부트 서버)가 사용자 데이터에 접근하기 위해 권한 서버(카카오,구글)에 요청을 보내는 것.
클라이언트 ID, 리다이렉트 URI, 응답 타입 등을 파라미터로 보내 요청한다.
실제 요청 예시)
GET spring-auhorization-server.example/authorize?
client_id=48a4893g
redirect_uri=http://localhost:8080/myapp&
response_type=code&
scope=profile
인증 서버에 요청을 처음 보내는 경우 사용자에게 보이는 페이지를 로그인 페이지로 변경하고 사용자 데이터에 접근 동의를 얻는다.(최초 1회). 이후에는 로그인만 진행한다. 로그인이 성공하면 권한 부여 서버는 데이터에 접근할 수 있게 인증 및 권한 부여를 수신한다.
사용자가 로그인에 성공하면 권한 요청시 파라미터로 보낸 redirect_uri로 리다이렉션한다.
이때 파라미터에 인증 코드를 함께 제공한다.
GET http://localhost:8080/myapp?code=a2sdf38s
인증 코드를 받으면 액세스 토큰으로 교환해야 한다!
액세스 토큰은 로그인 세션에 대한 보안 자격을 증명하는 식별 코드.
POST spring-auhorization-server.example/token {
"client_id" :"48a4893g"
"client_secret" : "shuefh",
"redirect_uri" : "http://localhost:8080/myapp"
"grant_type" : "authorization_code",
"code" : "siuefhufei1"
}
//토큰 응답 값
{
"access_token": "siufeh",
"token_type" : "Bearer",
"expires_in" : 3600,
"scope" : "openid profile"
}
제공받은 엑세스 토큰으로 리소스 오너의 정보를 가져온다. 정보가 필요할 때마다 API호출을 통해 정보를 가져오고, 리소스 서버는 액세스 토큰이 유효한지 검사 후 응답한다.
//리소스 오너의 정보를 가져오기 위한 요청
GET spring-authorization-resource-server.example.com/userinfo
Header : Authorization: Bearer aasdffb
다음 시간에는 Spring ouath2 client를 이용해서 spring security + jwt + oauth 로그인을 해보자!!