제 마이피가 메인에 노출되는지는 잘 모르겠네요... 많은 분들께서 보시면 좋을 텐데....
일단 OpenAPI를 쓰기 위한 인증 과정에 대해 조사를 좀 했습니다.
두세시간 만에 인터넷 사이트들을 보고 얼렁뚱땅 작성한 것이라 많이 엉성합니다...;;
제가 쓴 내용과 제가 이해한 내용이 맞는지 태클 좀 부탁드립니다~ 꾸벅.
-------------------------------------------------------
우선 API에 대한 정의부터 필요하겠군요.
API(Application Programming Interface, 응용 프로그램 프로그래밍 인터페이스)는 응용 프로그램에서 사용할 수 있도록 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있도록 만든 인터페이스를 뜻한다. (from 위키)
그렇다면 우리가 사용하고자 하는 공개 API, 즉 open API는 누구나 사용할 수 있게 공개된 API를 의미하겠군요.
공개 API(Open Application Programmer Interface, Open API, 오픈 API)는 누구나 사용할 수 있도록 공개된 API를 말한다. (from 위키)
Open API
웹에서 사용되는 Open API는 서비스를 제공하는 Website와 이를 활용하는 Website와의 규약으로, [API를 제공하는 Website]와 [서비스를 제공하는 Website]가 Open API를 통하여 데이터 소통. Open API를 활용함으로써 복잡한 프로세스를 거치지 않고 간단히 결과값만을 활용하여 새로운 서비스를 개발. (http://canon7.tistory.com/44)
따라서 우리가 사용하고자 하는 openAPI들은 다음, 구글 등의 웹 서비스 제공자가 자사의 특정 서비스에 대한 접근 방법, 처리, 수행, 요청 등의 Interface를 API 형식으로 공개하여 사용자에게 복잡한 과정 없이 결과값을 제공하는 것을 의미하겠네요.
참고로 우리가 개발하는 프로그램과 같이 웹 서비스를 혼합한 프로그램/어플리케이션을 메시업(Mashup) 서비스라고 합니다.
일단 미투데이 같은 SNS, 이미지 검색 같은 openAPI를 이용하기 위해서는 대부분 인증(Authentication) 과정이 필요합니다.
간단히 말해 사용자에게 contents에 대한 사용 권한을 주는 것입니다.
깊게 파고들자면, 일반적인 웹사이트의 경우 사용자가 웹사이트에 직접 로그인을 함으로써 자신이 직접 '인증'을 합니다.
하지만 스마트폰 어플리케이션과 같은 외부 서비스를 통해 해당 웹사이트에 접속하게 되는 경우(우리 처럼), 해당 소프트웨어는 사용자 대신 인증을 하고, 그 대신 사용자로부터 인증에 필요한 정보를 요구하게 됩니다.
그런데, 인증이 필요하다고 해서 인증 정보를 소프트웨어에 그냥 알려 준다는 것은 끔찍한 재앙을 내포하는 셈이겠죠? 또한 중간에 가로채일 우려도 있고요.
따라서 정보 유출을 막기 위한 Mechanism중 하나로써 인증키/비밀키를 이용한 인증 방식이 널리 사용됩니다.
간단히 설명하면, 인증키는 개발자의 웹사이트(다음 등...)의 ID입니다.
비밀키는 해쉬 알고리듬 등을 통하여 어플리케이션이 사용자의 요청 정보, 인증 정보 등을 암호화 해서 웹사이트에 보내면, 웹사이트가 이를 해독할 수 있는 키 입니다.
이 인증키/비밀키는 개발자가 웹사이트에 openAPI 신청을 하면 같이 발급되고요, 인증키도 중요하지만 특히 비밀키는 이를 통해 웹사이트로 넘겨진 변조 데이터들을 해독할 수 있으므로 외부에 노출되어서는 안됩니다.
여기까지가 openAPI를 이용하기 위한 인증 절차에 대한 간략한 설명이었습니다.
그런데 문제점은, 각 웹사이트 별로 이러한 인증 절차가 다르다는 것입니다. 즉, 인증 표준화가 이루어지지 않아서 사용자/개발자에게 불편함을 초래한다는 것 입니다. 보안 문제에서 취약함을 드러낸 인증 방법도 존재하였고요.
이에 따라 인증에 대한 표준 방안이 제시되었고, 이를 OAuth(pronounced “Oh Auth”) 규약(protocol), 줄여서 OAuth라 부릅니다.
다음은 네이버 OPEN API 공식 CAFE에서 발췌한 OAuth에 대한 간략한 설명입니다.
OAuth란?
Open API를 사용하기 위해선 인증이 필요합니다.
인증방식의 표준이 없기 때문에 제 각각의 방법으로 개발되고 있는 실정인데요
구글의 AuthSub, AOL의 OpenAuth, 야후의 BBAuth
OAuth는 제각각의 인증방식을 표준화하고 가장 좋은 방법만 가져다 만들었습니다.
즉 매쉬업 서비스로 만들어진 어플리케이션이 다른 어플리케이션의 사용자 정보를 접근할 수 있는
표준화된 방법을 제공하는 스펙입니다.
위 내용을 조금 더 쉽게 이야기 하면 A라는 서비스를 이용하고 있는 사용자는 A의 아이디와 패스워드를 가지고 있습니다. A 서비스를 이용해서 B 서비스를 만들기 위해서는 A 서비스의 사용자 정보가 필요한데 이때 OAuth의 인증방식을 통해 B 에서는 인증된 A의 개인정보 토큰을 받아 로그인을 하게 하며 이는 A 에서 로그인 한것과 같이 B에서도 처리하기 위한 방법입니다.
OAuth 인증방식을 이해하기 위해선
용어를 미리 숙지하셔야 합니다.
◦ 서비스 프로바이더(Service Provider) – OPENAPI를 제공하는 서비스를 말합니다.
◦ 사용자(users) - 서비스 프로바이더 혹은(그리고) 컨수머를 사용하는 이를 말합니다.
◦ 컨수머(Consumer) – API를 사용하여 개발된 애플리케이션 서비스를 말합니다.
◦ 보호된 자원(Protected Resources): 서비스 프로바이더에 존재하는 사용자의 데이터를 의미합니다.
◦ 컨수머 개발자(Consumer Developer) : 컨수머를 개발하는 개인 혹은 단체
◦ 컨수머 키(Consumer Key) : 서비스 프로바이더에게 컨수머 자신임을 인증하기 위한 키
◦ 컨수머 시크릿(Consumer Secret) : 컨수머의 컨수머 키 소유권한이 있는지 인증하기 위한 키
◦ 토큰(Tokens) – 컨수머에서 서비스 프로바이더에 있는 사용자의 보호된 자원에 접근하기 위해 사용되 사용자의 인증정보입니다.
▪ 리퀘스트 토큰(Request Token) : 컨수머가 사용자에게 접근권환을 획득하는 과정에서 사용하는
값이며, 이것은 차후 액세스 토큰으로 교환됩니다.
▪ 리퀘스트 토큰 시크릿(Request Token Secret) : 리퀘스트토큰이 사용자의 것임을 인증하기 위한
값입니다.
▪ 액세스 토큰(Access Token) : 컨수머가 사용자의 서비스 프로바이더를 통해서가 아닌 컨수머를
통해서 보호된 자원에 접근할 수 있는 권한을 받기 위한 값입니다.
▪ 액세스 토큰 시크릿(Access Token Secret) : 액세스토큰이 사용자의 것임을 인증하기 위한
값입니다.
OAuth 인증 방식에는 7가지의 인증과정으로 이루어져 있습니다.
A; Consumer가 Request Token 요청
B; Service Provider가 Request Token 발급
C; Consumer는 사용자를 Service Provider로 이동, 사용자를 인증하고 토큰 발급을 확인함
D; Service Provider는 사용자를 Consumer로 이동
E; Consumer는 Access Token 요청
F; Service Provider는 Consumer의 신원과 Request Token 확인, Access Token 발급
G; Consumer는 Access Token으로 사용자 정보에 접근
[출처] OAuth에 대해서 (네이버 OpenAPI 공식 카페) |작성자 openapi