Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

coding etude

201030 [OAuth 2.0] 본문

Javascript TIL

201030 [OAuth 2.0]

코코리니 2020. 10. 31. 02:06

OAuth 

 : 클라이언트 서버의 인증 방식이며, 유저()user)가 클라이언트 서버(client-server)를 통해 제 3의 서버(resource-server)로부터 인증을 받아 허가된 기능을 사용 할 수 있게 하는 인증 방법을 말한다.(http://www.oauth.com)

 

OAuth 는 따로 설치 할 필요 없이 OAuth를 제공하는 사이트에서 그 권한을 얻어 내가 만든 웹이나 앱에서 사용 할 수 있는 기능이다. 기본적인 개념을 정리하고 가자면 공식 문서에는 네 가지를 설명하고 있다.

 

1. resource-owner

 : 보호 된 리소스에 대한 액세스 권한을 부여 할 수있는 주체(제3 인증 사이트).

 

2. resource-server

 : 서버 허가 토큰을 사용하여 보호 된 리소스(자원)를 사용가능하게 해주는 서버(사이트의 인증서버)

 

3. client-server

 : 보호된 리소스(자원)를 요청하는 응용 프로그램으로 쉽게 말해서 내가 서비스 하는 또는 내가 관리하는 프로그램을 말한다.

 

4.authorization-server

 : 성공적으로 클라이언트에 허가 토큰을 발급하는 서버.

 

결국 위의 인증서버와 자원 서버는 하나로 이루어 질수도 있고 따로 분리 될 수도 있지만 결국 하나의 사이트에서 이루어 지는 다른 기능이라고 말할 수 있다.

 

위의 설명을 토대로 인증 절차가 어떻게 이루어 지는 지 확인해 보자.

OAuth 2.0 진행 순서표

조금 복잡해 보이지만 화살표의 색상과 숫자를 보면서 순서를 확인해 보자!!

 

1. 먼저 사용자가 브라우져를 통해서 승인요청을 보내면 클라이언트 서버에서 오너의 인증서버로 허가 토큰(access-token)

     발급을 요청한다.

2. 인증서버가 요청한 URL 을 확인하고 등록된 URL이 맞다면 허가 토큰을 발습해 준다.

3. 인증인 되었음으로(로그인 or 요청소스 오픈) 브라우져에서 작업 후 다시 사용 요청을 보낸다.

4. 요청을 받은 리소스 서버에서 인증서버로 들어온 허가 토큰이 유효한진 확인 한다.

5. 인증서버가 확인절차를 끝내고 다시 리소스 서버로 확인의 값을 보낸다.

6. 확인 받은 내용이 정확하다면 요청한 자원을 내려준다(기능사용) / 하지만 아니라면 사용을 막는다.

 

생각보다 단순한 과정이지만 이렇게 말로 설명하려니 너무 힘이든다 ... 

 

공식문서의 자료

어찌되었든 인증과정을 알았다면 도대체 계속 왔다리 갔다리 하는 저 토큰이 무엇인지 한번 알아보자..

 

token

 : 인증을 위해 사용되는 암호화 되어 있는 문자열

이라고 간략하게 설명 할 수 있다. 토큰은 서버통신이 항상 stateless 한 성질을 stateful 하게 만들어주는 역할도 진행한다. 사용자의 정보와 활동 기록등을 저장한 cookie, 사용자의 정보를 담은 session, 그리고 secret key세가지를 조합여허 토큰을 생성한다. 

생성된 토큰은 set-cookie 를 통하여 브라우져에 전송되고 브라우져에 쿠키로 형태로 저장되어 매번 사용 요청때 만다 토큰을 보내 확인 절차를 거치게 만든다.

 

쿠키,세션,토큰에 관한 이야기는 다음 스프린트에서 조금 더 자세히 이야기 해보자.

 

그럼 이 토큰은 왜 서버나 DB가 아닌 브라우져에 저장이 될까?? 

답은 간단하다. 브라우져에서 단순하게 인증서버로 확인 요청만 하기때문에 서버에 머물러 있을 필요가 없는 것이다.

브라우저에서 매번 개인의 정보를 적어서 보내는 것이 아니라 브라우져에 한번 토큰을 저장 했다면 이 토큰을 이용하여 기능을 바로 사용 할 수 있는것이다.

참 편리한 기능이라고 할 수 있겠지만.... 그건 사용자 입장에서만....ㅠㅠ

 

이 토큰은 사용기간이 정해져 있는 기차표 같은 것이라서 일정 시간이 지나면 사용 할 수 없게 된다.. 그래서 클라이언트 서버에서 Refresh token을 이용하여 다시 사용 할 수 있는 기능을 구현해야한다.. 또한 Refresh token은 따로 스토리지를 만들어서 관리 한다고 한다...

 

무튼 위에서 설명 했듯 토큰은 보안상에도 용이하고 사용면에서도 편하기 때문에 현재 OAuth 와 같은 토큰 인증 방식이 점점 많이 사용 되고.. 아니 이미 많이 사용 되어 지고 있다 .. 기존 세션 인증 방식과는 비슷하면서도 다른... 뭐 그렇다고 한다... 

 

자그럼 이제 가장 중요한 사용 방법!!!

이 OAuth 를 허가해주는 사이트별로 명칭과 신청 방법이 조금씩 다르지만, 가장 중요한 것은 딱 두가지 이다.

OAuth 를 신청하게 되면 Client ID 와 Client Secret 을 발급해 주는데 이 두가지는 남에게 공개해서도 유출해서는 안되는 정보이다. 왜냐!!! 바로 이 두가지 정보로 인증서버에 요청을 보내야지만 인증절차를 진행한다는 것이다.

애초에 이 두가지가 다르면 토큰 발급에 대한 고려 자체를 하지 않는 것이다.. 말그대로 입구컷!!

 

// 예시 Github 의 승인 요청 방법
app.get('/callback', (req,res)=>{
  const requestToken = req.query.code;
  axios({
  	method:'post',
  	url: `https://github.com/login/oauth/access_token?client_id=${clientID}&client_secret=${clientSecret}&code=${requestToken}`/
    hearder:{
    	accept: 'application/json'
    }
  .
  .
  .
  .

위의 방식처럼 승인 요청 시 입력해야 하는 값은 절대 유출 되면 안되겠지요????!!!!!

 

지금까지 OAuth 와 인증에 사용되는 token 에 대해서 간략하게 나마 알아봤다... (조금 더 깊어지는 날이 오겠죠...?? ㅠ)

기본적인 개념과 진행 절차에 대해서 꼭 기억하고 넘어 갈 수 있도록 하자.. 다음은 위에서 언급한 쿠키/ 세션/ 토큰을 비교 분석 해보는 포스팅을 준비해 보도록 하겠다...20000...

 

'Javascript TIL' 카테고리의 다른 글

[sequelize] 서버구현 초기 셋팅 하기  (0) 2020.10.31
201026 [MVC / ORM / sequelize]  (0) 2020.10.26
201026 [SQL]  (0) 2020.10.26
201007 [commonJS & express]  (0) 2020.10.06
201006 [Server / node.js]  (0) 2020.10.06