본문 바로가기

참고자료

oauth-client 의 설명

 

a.클라이언트

b.우리가 제공하는 어플리케이션(=서버)

c.구글, 네이버 등 클라이언트가 이용하는 곳의 서버(= resource server)

d.oauth 서버

 

1. register

a의 회원정보를 이용하기 위해선 b는 c의 승인을 미리 받아놔야 된다. 

서비스 마다 다 다르지만 공통적으로 client id  / client secret / Authorized redirect URIs 를 요구한다.

client id : b 를 식별하는 id

client secret : client id 의 비밀번호

Authorized redirect URIs : c가 권한을 부여할때, c가 Authorize code를 보내줄 url

 

 

2.인증

인증은 기능별로 받는다. 기능을 scope 라고 하자

a 가 b 에 요청할때 c 와 연동하여 실행 할 기능이 있을것이다. 

버튼 같이 a가 요청할 때의 link를 아래와 같이 설정한다. 

http://b.server/?client_id=id&scope=사용할 기능1,사용할 기능2,& redirect_uri=http://client/callback

 

a가 naver에 로그인 버튼을 클릭했을 때 naver 계정으로 로그인을 하면 c는 로그인의 여부를 판단을 하고

a가 c의 회원이라서 로그인에 성공을 하면 우리가 설정한 link를 확인하고

register 때 받은 client_id가 있는지, 요청하는 redirect_uri가 일치하는지 확인한다. 

uri가 일치하지 않으면 그대로 연동 프로세스를 종료하고, 

일치한다면 a에게 scope 에 대한 권한을 b에다가 부여할 것인가를 물어본다.

 

그럼 c에는 client_id / client_secret / Authorized redirect URLs 이외에

b에서의 user_id 와 a 의 scope를 등록한다.

또 c 는 임시 비밀번호를 사용한다. authorization code 라고 하는 것이다.

c는 a에게 authorization code를 아래와 같이 헤더를 통해 전송한다.

Location:https://client/callback?code=3

 

a의 웹 브라우저는 헤더를 확인하고 b에다 위의 주소로 이동을 한다.

그러면 b 는 authorization code 를 알게 된다.

b는 c에게 이런 주소로 요청을 한다.

 

https:resource.server/token?grant_type=authorization_code

&code=3

&redirect_uri=https://client/callback

&client_id=1

&client_secret=2

 

그럼 이제 또 c에서는 보내온 정보들이 자신이 가지고 있는 정보와 일치하는지 확인한다.

일치한다면 authorization_code를 b와 c에서 삭제하고 c는 b에게 access token을 발급한다.

 

 

3.Access token 발급 과 refresh token

c는 access token을 b에게 발급한다. 

이 token은 이제 추후에 요청이 들어와도 access_token을 보고 그 token에 해당하는 정보  중 

user id와 scope를 확인한다.

 

access token도 유효기간이 있다. 그럼 다시 받아야되는데 이때 재발급을 쉽게 해주기 위해 사용하는게 

refresh token이다.

 

보통 access token 과 refresh token 을 같이 발급한다. 

refresh token은 유효기간이 없다. 때문에 재발급시에는 refresh token을 확인하고

access token을 재발급 한다.

access token과 refresh token을 같이 재 발급 하는 경우도 있다. 

 

 

'참고자료' 카테고리의 다른 글

aws 배포 관련 참고 사이트  (0) 2021.06.08
인코딩과 디코딩  (0) 2021.06.01
aws 에 배포  (0) 2021.03.29
google cloud platform (GCP)의 사용법  (0) 2021.03.26
aws  (0) 2021.03.22