OAuth가 무엇인가?
Client
Resource Owner(사용자)
Resource Server(구글, 카카오 등)
Authorization Server(인증을 담당하는 서버)
만약 우리가 사용자의 외부 서비스(카카오, 구글 등)에 접근을 해야하는 프로그램을 만들어야 한다면
그 때 우리는 사용자의 외부 서비스 ID나 비밀번호 같은 개인적인 정보가 필요할 수 있다.
하지만 사용자의 입장에서 처음보는 사이트를 신뢰하기 힘들 뿐더러
개인정보를 관리해야 하는 입장에서도 이런 개인정보가 유출 되었을 때 책임을 피해 가기 힘들다.
또한 이 정보의 원 주인인 외부 서비스 입장에서도 신뢰할 수 없는 제 3자가 가지고 있다는 것은 매우 불만족스러운 상황일 것이다.
이 때 필요한 것이 바로 OAuth이다.
우리는 OAuth를 통해서 사용자의 ID나 비밀번호 같은 개인적인 정보가 아니라 Access Token을 발급 받는다.
이를 이용하여 구글과 같은 외부 서비스에 접근하여 사용자의 정보를 수정하거나 삭제하는 등 더욱 안전하게 상호작용하게 할 수 있다.
등록
다 다르지만 공통적으로는
1. Client ID(다른 사람에게 보여도 됨)
2. Client Secret(절대 다른 사람에게 보이면 안됨. 보안사고)
3. Authorized redirect Secret URIs(등록했던 페이지가 아닌 곳에서 요청한 경우 보내주지 않음)
가 필요하다.
Resource Owner의 승인
버튼은 저 링크를 만들어주면 된다.
https://resource.server/ ➡️ 링크주소
?client_id=1 ➡️ client id 값
&scope=B,C ➡️ 필요한기능(scope)
&redirect_url=https://client/callback ➡️ redirect url 값
1. Resource Owner가 Authorization server가 위 주소로 OAuth로그인을 요청하게 되면
Authorization server에서 Resource Owner가 현재 로그인이 되어 있는지 확인하고
로그인이 되어있지 않으면 로그인을 요청하는 화면을 보여준다.
2. 로그인 정보가 일치하게 되면 Authorization server에서 Resource Owner가 요청한 URL 주소가 맞는지 확인하고
맞다면 client에서 요청한 필요한 기능(scope)의 권한을 동의할 것인지 체크한다.
3. 동의를 누른다면 Authorization server에서 Resource Owner가 client id에 scop에 대한 권리를 동의 받았다는 정보를 갖는다.
Authorization server의 승인
1. Authorization server는 client에게 바로 access token을 발급 받지 않고, Resource Owner에게 임시 비밀 번호인
authorization code를 Location : https://client/callback?code=3 이런 방법으로 전송한다.
2. 응답하게 된다면 Authorization server가 보낸 주소로 Resource Owner는 이동하게 되는데
Location : https://client/callback?code=3 이 뜻은 authorization code가 3이라는 뜻이다.
3. 은밀히 이동된 주소로 인해 client는 authorization code가 3이라는 정보를 갖게된다.
4. client는 Authorization server에게 access token을 요청한다.
이 때 client는 redirect url, client id, client secret, authorization code 등 Authorization server에서 요청하는 정보를 보낸다.
5. Authorization server는 위 정보들이 모두 일치하는 것을 확인하고 access token을 발급한다.
Access Token 발급
1. 정보가 모두 일치하는 것을 확인한 Authorization server와 client는 재인증을 방지하기 위해 authorization code를 삭제한다.
2. Resource Server에서 access token을 발급한다.
3. Resource Server가 client에 access token을 전달한다.
4. client id, client secret, access token이 모두 일치하면 동의한 scop(기능)을 수정하거나 삭제할 수 있는 권한을 얻게 된다.
API(Application Programming Interface)호출
client의 목적은 resource server를 호출하여 어떤 일을 하는 것이다. 이 때 필요한 것이 API이다.
https://developers.google.com/identity/protocols/oauth2/web-server
웹 서버 애플리케이션용 OAuth 2.0 사용 | Authorization | Google Developers
이 페이지는 Cloud Translation API를 통해 번역되었습니다. Switch to English 의견 보내기 웹 서버 애플리케이션용 OAuth 2.0 사용 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분
developers.google.com
Refresh Token
access token은 일반적으로 수명이 있다.
이 기간이 지나면 다시 접속할 수 없으므로 이 때 필요한 것이 바로 refresh token이다.
위 수업에서는 Authorization server에 대해 Resource server와 뭉뚱그려 다뤘지만 원래는 다른 것.
(A) client가 authorization server로부터 권한을 획득한다.
(B) authorization server가 client에게 access token을 발급한다.(+보통 refresh token도 같이 발급 받음)
(C) API를 호출 할 때에는 access token으로 접근한다.
(D) resource server에 있는 보호되고 있는 자원를 가져온다.
(E) 어느날 access token으로 잘 사용(수정, 삭제 등)하다가
(F) 유효하지 않은 토큰 에러가 나타난다면 access token의 수명이 끝난 것을 의미한다.
(G) authorization server에 refresh token을 요청하여
(H) refresh token을 다시 발급 받는다.
경우에 따라서 refresh token을 새로 발급 받는 경우도 있고 새로운 access token을 발급 받을 수도 있다.
'etc' 카테고리의 다른 글
node.js 설치하기 + 'MODULE_NOT_FOUND' 에러 해결 (0) | 2023.05.23 |
---|---|
Github로 배포하기 (0) | 2023.05.23 |
리액트 웹앱 번들링 후 배포 (0) | 2022.09.27 |
번들링과 웹팩 (0) | 2022.09.26 |
웹표준, 웹접근성을 공부하며 느낀점 (0) | 2022.09.07 |