본문 바로가기

WebApp/Oauth

Oauth - 용어 및 절차(1)

1.용어

client = 제 3자 앱 (ex 생활코딩)
resource owner = 리소스의 소유주 (일반 사용자)
resource server = API를 통해 리소스를 제공 (구글의 리소스 저장 서버)
authorization server = 인증 담당으로 access token을 client 에게 보내줌 (구글의 인증 담당 서버)

리소스 서버와 인증 서버는 같은 서버일 수도 있음

 

 

 

2.등록

 

Oauth를 사용하기위해서는 일단 리소스서버에 우리의 앱인 클라이언트를 등록해야하는데

서비스(페이스북, 구글등)마다 등록방법이 다르다
공통적인것은
client ID 와 
client secret
authorized redirect URls 
이 세가지는 공통적인것이다

client ID는 애플리케이션을 식별하는 식별자이고
client secret은 그에 대한 비밀번호로 절대로 외부노출되면 안됀다 
authorized redirect URls는 리소스 서버가 권한을 부여하는 과정에서 우리에게 authorized code라는 값을
전달해줄것인데 그때에 이 주소로 전달해주세요 라고 알려주는것이다

( 영상설명 예제에서는 client 이름은 opentutorials 이며 redirect_uris= http://client/callback 사용)

그러면 리소스서버는 저 주소가 아닌 다른주소에서  authorized code를 요청하면 그것은 무시하는 것이다


 

 

 

 

3.Resource Owner의 승인

 

OAuth의 첫번째 절차는 Resource Owner가 Resource Server에게 Client의 접근을 승인한다는 것을 알려줘야 한다

인증과정
우선우리가 등록을 하게 되면
리소스 서버와 클라이언트는
양쪽다 클라이언트 아이디 클라이언트 시크릿
리다이렉트 유알엘이라는 세가지의 핵심적인 정보를
둘다 알게 된다



그리고 후에 살피겟지만
리다이렉트 유알엘이라는 페이지를 클라이언트는
구현해놓고 준비를 해놓고 있어야한다

그러면 이제 여기서 출발을 하면되는데 하나만 더 짚어보면
리소스 서버가 갖기있는 기능이 예를 들어서 4개다
그리고 각각의 기능의 이름이 ABCD라고 헀을때


클라이언트가 리소스 서버의 모든 기능이 다 필요한것이 아니라
저 중에서 BC라는 2개의 기능만 필요하다고한다면
모든 기능에 대해서 인증을 받는것이 아니라 
최소한의 필요한 기능에 대해서반 인증을 받는게 좋다


그래서 이런상황이라고 헀을때 일어나는일을 살펴보면

리소스오너 즉 유저는 우리의 애플리케이션(클라이언트)에 접속을
할것이다 그런데 그 접속을 하는 과정에서
우리의 애플리케이션이 리소스서버를 사용해야하는 상황이
있다 예를 들면 페이스북에다가 글을 게시한다는지
또는 구글 켈린더에다가 날짜를 기록해야하 한다든지
이러한 작업을 해야한다면 우리는 리소스오너에게
이런화면을 보여주게 될것이다

아니면 귀하꼐서 하시려는 일은 페이스북의
어떤기능이 필요한데 이 기능을 쓰려면 인증을 거쳐야합니다

어떤것이던간에 사용자가 동의를 해야지 그다음 과정으로
진행할 수 있을것인데
예를 들어 위와 같은경우는 버튼을 클릭하면 동의를 한다는것인데
버튼은 그냥 링크를 만들어주는것이다
예를 들어 링크를 보면 

http://resource.server/

?client_id=1(우리 클라이언트의 id값)
&scpoe=B,C(우리가 사용하고자 하는 기능스콥 B,C)
&redirect_uri=http://client/callback(리다이렉트 유알엘의 값)

 

이런형식의 주소로 이동할 수 있도록 링크를 주면된다



예를 들면 우리의 예제의 구글연동앱에
login for google를 살펴보면


redirect_url과 scopre에 대한정보(구글이 정해놓은 형식)
그리고 client_id값도 부여되어 있다


리소스 오너가 리소스 서버로 접속을 저 주소로 하게되면
리소스 서버가 리소스 오너가 현재 로그인이 되어 있는지
되어 있지 않은지를 봐서
로그인이 안되어 있으면
로그인을 하라는 화면을 보여준다


그리고 리소스 오너가 로그인을 해서 로그인에 성공했다
그러면 이제 리소스 서버는 그때서야 뭘 확인하냐면
클라리언트 아이디 값과 같은 클라이언트아이디값이 있는지
확인하고 그리고 자신이 갖고 있는 클라이언트 아이디값과
리다이렉트유알엘과 요청받은 것과 비교확인해서
다르다면 작업을 끝내버리고
같다면 리소스 오너에게 링크의 스콥에 해당하는 권한을
클라이언트에게 부여할 것인지를 확인하는 메세지를 전송한다


그럼 그 메세지에는 어떠 어떠한것을 클라이언트가 요청하고있으며
이것을 허용할 것인가라는 것을 물어보는데
이때 이것을 유저가 허용한다고 클릭하면
허용했다는 정보가 리소스서버로 전송이 될것인데
그럼 리소스서버는 예를 들어 리소스 오너의
유저아이디가 1번이라고 치면 user id:1 scope:b,c 와 같은 정보를 저장한다
이것은 유저아이디1번이 스콥 b와 c에 대한 작업을
클라이언트가 처리하는 것에 동의하였다는 정보이다



여기까지 우리가 사용자로부터 리소스서버에 접속하는 것에
대한 동의를 구하는 과정을 거쳤고
그러면이제 리소스서버가 실제로 인증을 어떻게 처리하는가를
보자

 

'WebApp > Oauth' 카테고리의 다른 글

Oauth - 절차(3)  (0) 2020.11.10
Oauth - 절차(2)  (0) 2020.11.10