1-1. Authorization Server
Client Id
: 우리가 만들고 있는 application을 식별하는 식별자. 외부에 노출돼도 됨.Client Secret
: Client Id에 대한 비밀번호. 외부에 노출돼면 안 됨.Authorized Redirect Urls
: 리소스 서버가 권한을 부여하는 과정에서 우리에게 해당 url로 Authorized Code를 전달할 것임.https://resource.server/?client_id=1&scope=B,C&redirect_url=https://client/callback
→ Resource Server가 Resource Owner의 로그인 여부를 확인하고, 로그인을 안했다면 로그인 화면을 보여준다. → 로그인에 성공하면 Resource Server는 url의 client id값과 같은 client가 있는지 확인하고, redirect url값과 같은지 다른지 확인한다. 다르면 여기서 작업을 끝내고 → 같다면 Resource Owner에게 scope에 해당하는 권한을 줄것이냐고 물어본다. → 허용한다고 하면 허용했다는 정보가 Resource Server로 전달되고 다음과 같이 정보가 Resource Server에 저장된다.user id: 1
scope: b,c (기능)
이제 Resource Server의 승인을 받아야 access token을 발급받을 수 있음!
이때 사용하는 임시 비밀번호가 authorization code!
access code 를 Resource Server가 Resource Owner에게 다음과 같이 전달해 줌
location: [https://client/callback?code=3](https://client/callback?code=3)
그러면 Resource Owner가 해당 location으로 이동하게 됨.
→그러면 code=3으로 client 는 authorization code 3을 얻게 됨
→ 그러면 client는 resource server에 직접 접속하여 access code 받게 됨 (아래 주소로)
https://resource.server/token?grant_type=authorization_code&code=3&redirect_uri=https://client/callback&client_id=1&client_secret=2
→ 이렇게 하면 3자 인증이 완료됨!
Resource Server는 authorization code를 보고 자기가 가진 access code와 일치하는지 확인(어떤 클라이언트에게 발급한거였더라?client id, client secret, redirect url 맞춰보기)
→ 4가지 정보가 완전히 일치하는지 확인하고, 일치하면 다음단계 진행!
oauth의 목적은 access token!
일단 client, resource server는 authorization code값을 지워야함. 그래야 인증을 다시하지 않음.
→ 이후 resource server는 access token을 발급함.
→ access token을 client에게 응답해줌.
→ client는 access token을 내부에 저장함
그리고 access token은 client가 access token을 가지고 접근하면 user id에 해당하는 사용자의 scope에 해당한 정보에 접근이 가능한 친구구나! 라고 생각!