NeuroWhAI의 잡블로그

OAuth 2.0 본문

개발 및 공부

OAuth 2.0

NeuroWhAI 2020. 2. 17. 21:18


OAuth 2.0는 가끔, 특히 구글 API를 사용할 때 필연적으로 만났던 인가 방식인데 제대로 배워두자고 생각해서 책을 사서 보고있습니다.
책에 나온 내용은 어렵지 않은데 막상 실제로 쓰려고 하면 서비스마다 OAuth 2.0의 세부적인 구현 방법이나 용어가 달라서 어렵게 느껴지는 것 같습니다.

​크게 2가지 방식이 있는데 Implicit grant 방식만 간단하게 정리해보면 아래와 같습니다.

​일단 Implicit grant는 비신뢰 클라이언트를 위한 방식입니다.
(이게 좀 애매한 게 '신뢰'라는 건 인증 키를 안전하게 저장할 수 있느냐 여부, 보안 통신 가능 여부 등으로 결정할 수 있다는데 구체적인 기준은 없는 것 같습니다.)
주체는 사용자, 비신뢰 클라이언트, 서비스 제공자 이렇게 있으며 서비스 제공자는 뭐 예를 들어서 클라이언트가 사용자에게 페이스북 프로필을 달라고 하려면 서비스 제공자는 페이스북이 됩니다.
서비스 제공자는 클라이언트를 구분하고 OAuth 2.0을 구현하기 위해 필요한 정보들을 클라이언트에게 요구합니다.
이 정보는 서비스 제공자마다 다를 수 있지만 필수적으로 ID, Secret, Redirection URL을 요구합니다.
ID는 말 그대로 고유 식별자이고 Secret은 ID만 가지곤 정말 해당 클라이언트의 요청인지 알 수 없으니 비밀번호로 쓰는 것입니다.
리다이렉션 경로는 인가 결과를 전달 받을 클라이언트 측 경로입니다.
클라이언트는 OAuth 2.0을 수행하기 위해 위 정보들에 더해서 Auth URL도 알고 있어야 합니다.
이 경로는 보통 서비스 제공자가 문서로 제공합니다.
Auth URL은 사용자가 권한을 허가할지 결정할 장소가 됩니다.
신뢰 클라이언트일 때 Authorization code grant 방식에선 Access token URL이 또 필요한데 이중으로 키를 얻는 방식이라 별도로 필요한거라고 합니다.
클라이언트 예시는 뭐 사용자의 생일 때 축하 메시지를 띄워준다고 합시다.
먼저, 사용자가 클라이언트에게 해당 기능의 활성화를 요청합니다.
그럼 클라이언트는 적절한 파라미터와 함께 사용자를 페이스북의 권한 허가 화면(Auth URL)으로 이동시켜 로그인 및 생일 정보에 접근할 수 있는 권한을 요청합니다.

네이버로 치면 이런 화면

사용자가 요청을 허가했다면 페이스북은 클라이언트로부터 미리 얻은 Redirection URL로 인가 결과와 접근 키 등을 전달해줍니다.
클라이언트는 받은 결과와 키를 적절히 이용하여 페이스북에 생일 정보를 요청하여 받을 수 있게 됩니다.

​솔직히 구 API들은 단순히 영구적인 API 키만 하나 받아두면 계속 쓸 수 있어서 참 편했는데 아무래도 보안이 그러니 이렇게 바뀐 것이겠죠...



Comments