클라이언트가 서버에 등록하기 위한 필수 요소 세 가지는 client ID, client secret, authorized redirect URIs입니다. 다시 말해, 클라이언트를 google developer와 같은 곳에 등록을 하게 되면 client ID와 client secret을 얻게 됩니다. client ID는 우리가 만든 어플리케이션의 식별자 ID이며, secret은 그에 대한 비밀번호이고, redirectg URIs는 리소스 서버가 권한을 부여하는 과정에서 authorized code라는 것을 전달하는데, 이 코드를 이 URI로 전달합니다.
여기서 user를 Resource Owner라고 하며, 내 서비스를 Client, 다른 서비스를 Resource Server라고 합니다. Client와 Resource Server 사이에 Authorization Server가 있는데, 이는 Client가 Owner에게 허가를 받고 code와 access token을 부여해 주는 서버입니다. 다음 설명에서는 편의상 Resource Server와 Authorization Server를 하나로 통일(Authorization Server)하여 설명하려고 합니다.
먼저 owner가 client에 접근하게 되면, client는 server의 기능이 필요하기 때문에 server에 먼저 로그인해야 된다는 화면을 띄워줍니다. 이때 ‘구글로 로그인’ 버튼의 주소는 [http://서버 주소&scope=b,c&client_ID=1&redirect_uri=리다이렉트 주소]의 형식으로 되어있습니다.
owner가 이 버튼을 누르면 server로 접속하게 됩니다. server에 로그인을 성공하게 되면 주소의 client id 값이 server에 등록된 client id값과 동일한지 확인하고, redirect URI도 확인한 후 모두 같으면 client에서 요청한 scope를 제공하는데 동의할 것인지의 여부를 owner에게 묻습니다.
owner가 허용하게 되면 허용했다는 메시지를 server에게 전송하고, server가 전송을 받으면 client에서 요청한 기능(scope)를 server에 저장합니다.
scope를 server에 저장하고, 정보가 저장된 authorized code를 발급합니다. 이 authorized code를 owner에게 전송하는데, 헤더값으로 [location:https://redirect_uri?authorized_code=3]을 줍니다. 이를 통해 owner를 redirect 시킬 수 있습니다. 이를 통해 client가 authorized code=3이라는 것을 알 수 있게 됩니다.
client가 authorization code를 획득하면 resource server로 정보를 전송하는데 형식은 다음과 같습니다.
[https://서버주소/?grant_type=authorization_code&code=3&redirect_uri=https://리다이렉트주소&client_id=1&client_secret=2]
authorization code와 client secret 두 개를 결합해서 resource server에 전송합니다. client로 부터 받은 authorization code를 확인한 후 server에서 가지고 있는 코드 정보를 확인하고, 모든 정보가 일치하면 authorization code를 삭제하고 access token을 client에 발급해줍니다.
client ID는 user ID가 아니라 어플리케이션의 식별자 ID이다.
등록 과정은 developer에서 client를 등록하는 과정을 말한다(ID와 secret을 server에 저장함).
리다이렉트 주소는 client(어플리케이션) 주소이다. call back.
header에 location을 추가하면 설정한 주소로 페이지 이동이 가능하다.
[전체적인 Authorization code grant 흐름]
<조사하면서 계속 헷갈렸던 부분>
Auth와 OAuth의 차이는? 토큰을 사용하느냐 사용하지 않느냐의 차이이다. 보안을 강화하기 위해 나온 방식이 OAuth이다. Auth는 Authentication(인증), OAuth는 Authorization이다(권한).
OAuth 서버라는 것이 무엇을 의미하는 것인가? 말 그대로 oauth2.0을 구현하는 것을 말하는 것 같다.
'_정리&복습_' 카테고리의 다른 글
[OS] CPU스케줄링 - 스케줄링 알고리즘 (0) | 2019.04.29 |
---|---|
[OS] CPU스케줄링 - 기본 개념 (0) | 2019.04.19 |
[솝트] 2차 세미나 (Node js 모듈 정리) (0) | 2019.04.19 |
[솝트] 2차 세미나 (Node js란?) (0) | 2019.04.18 |
OAuth2.0 flow (0) | 2019.02.27 |