OAuth에 대해서 설명해주세요.
OAuth란?
간단하게 소셜 로그인을 생각 할 수 있습니다. 소셜 로그인에 사용되는 위임 권한부여를 위한 표준 프로토콜이 OAuth(Open Authorization)입니다. 위임 권한부여(Delegated Authorization)는 서드파티 어플리케이션이 사용자의 데이터에 접근하도록 허락해주는 것을 말합니다.
OAuth를 사용하는 이유는
보안의 수준을 알 수 없는 애플리케이션에서 일일이 계정을 만들어 사용하면 ID/PW관리가 어렵고 개인정보가 유출되면 연쇄적으로 피해가 심각해질 수 있기 때문에 보안의 수준이 어느정도 검증된 사이트(OAuth provider(ex. google, facebook))의 API를 이용해서 인증을 받는 방법을 활용하게 되었습니다.
사용자 입장에서도 신뢰도 높은 서비스의 가입과 로그인 과정만으로 다른 웹 서비스를 이용하게 되면서 편리함, 재활용성에 큰 장점이 있어 사용률이 높아져 왔으며 현재 기준으로는 웹 서비스의 필수적인 요소로 자리잡아가고 있습니다.
OAuth의 간단한 과정 설명으로는
OAuth는 클라이언트 애플리케이션이 사용자(리소스 오너)의 정보에 직접 액세스하지 않고, 대신 access token이라는 특별한 권한 부여 토큰을 먼저 획득하고 프로바이더(리소스 서버)의 인증 서버로부터 접근 권한을 얻게 됩니다. access token을 획득한 요청자는 access token을 사용하며 프로바이더가 제공해주는 사용자의 정보를 사용 할 수 있게 됩니다. 이로써 해당 사용자의 정보만을 활용하여 회원가입하거나, 로그인 정보를 활용 하여 애플리케이션 서비스를 이용할 수 있게 도와줍니다.
추가질문 :
과정을 예시를 들어 단계적으로 좀 더 설명해주실수 있나요?
1.
사용자가 내 웹사이트의 특정 페이지에 접근하려고 소셜 로그인을 시도합니다.
2.
내 웹사이트에서는 사용자의 인증이 안 된 경우, "구글에서 인증받고 올래?"하며 동의를 요구하는 페이지를 사용자에게 표시합니다.
3.
사용자가 동의하면, 내 웹사이트는 구글에게 사용자가 인증한 요청을 전송합니다.
4.
구글은 사용자가 로그인되어 있지 않으면 로그인 화면을 보여주고, 로그인이 되어 있으면 "이 웹사이트가 너의 구글 정보를 사용할 수 있도록 동의할래?"라는 화면을 표시합니다.
5.
사용자가 동의하면, 구글은 인증 코드를 내 웹사이트에 전달합니다.
6.
내 웹사이트는 받은 인증 코드와 구글에 등록한 클라이언트 ID와 클라이언트 Secret 코드, 그리고 인증 코드를 구글에 전송합니다.
7.
구글은 클라이언트의 정보가 올바르게 검증되었음을 확인하고, access token을 내 웹사이트에 제공합니다.
8.
이제 내 웹사이트는 access token을 사용하여 구글에게 사용자의 정보를 요청하고, 구글은 필요한 정보를 전달합니다.
이러한 과정을 통해 사용자의 동의를 거쳐 안전하게 구글로 로그인하는 사용자 정보에 접근할 수 있게 됩니다. 이런 서비스를 이용하기 위해서는 프로바이더(구글 등)의 개발자 등록과 앱(서비스) 등록이 필수적입니다. 예로 네이버 디벨로퍼에서 본인의 서비스를 등록해야 Client ID, Secret Code를 받을 수 있습니다. 또한 제공되는 정보는 서버(프로바이더)측에서 정해진 항목들 외에 다른 정보는 사용 할 수 없습니다.
추가질문 :
OAuth 1.0과 2.0은 무슨차이인가요?
대부분의 새로운 웹 및 모바일 애플리케이션에서는 OAuth 2.0이 더 널리 사용되고 있습니다. 간략히 차이점을 설명해드리면,
OAuth 2.0은 보통 HTTPS를 통한 안전한 연결을 사용하며, SSL/TLS를 기본적으로 사용하고 있어 보안이 강화되어 있습니다. 보통 액세스 토큰만 사용합니다. OAuth 2.0은 JSON을 기본으로 지원하며, 토큰 교환과 관련된 데이터를 JSON 형식으로 주고받을 수 있습니다.
OAuth 1.0은 서명된 요청(signature-based requests)을 사용하여 사용자를 인증합니다. 각 요청은 고유한 서명(signature)을 포함하고 있어 이를 통해 인증됩니다. 액세스 토큰과 요청 토큰(request token) 두 가지 종류의 토큰을 사용하기 때문에 복잡도가 높고 직관적이지 않습니다. 2.0과 비교하여 보안이 강화되어있지 않습니다. OAuth 1.0은 주로 URL 인코딩된 파라미터를 사용하므로 JSON 형식의 데이터 교환에는 제약이 있습니다.