적용하기
Last updated
Last updated
OAuth 2는 개발자가 새롭게 만든 어플리케이션 이나 웹 사이트에서 사용자의 비밀번호와 같은 민감한 정보를 넘기지 않고 사용자가 허용한 권한 만큼의 기능만을 접근할 수 있는 인증 방식입니다.
우선 시작하기에 앞서, 이미 개발된 서비스나 앱을 쿨에스엠에스 앱스토어에 등록을 하셔야 합니다. 등록이 정상적으로 완료된다면, 클라이언트의 아이디와 클라이언트의 시크릿 코드를 사용하여 인증 절차를 시작하실수 있습니다. 클라이언트 시크릿 코드는 처음 생성시에만 보이니 보관 및 노출에 유의하여 주세요.
실제로 쿨에스엠에스의 OAuth2를 사용하여 웹 어플리케이션을 개발한 예가 있으니 아래 링크를 참고하시면 보다 쉽게 OAuth2를 적용하실 수 있으실 겁니다.
개발하신 웹 사이트 또는 어플리케이션 에서 쿨에스엠에스 로그인을 호출하기 위해 아래의 링크와 쿼리 파라미터 값을 추가하여 호출해주셔야 합니다.
보다 자세한 API References는 OAuth2 API Document 를 참고 부탁드립니다.
필요한 GET 쿼리 파라미터는 아래와 같으며 필드에 따라서 필수항목과 옵션 항목들이 있습니다.
// rseponse_type이 token일 경우 { access_token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.ZwUymzWAUiTxQ...', refresh_token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.ZwUymzWAUiTxQ...' }
필요한 POST body 파라미터는 아래와 같으며 필드에 따라서 필수항목과 옵션항목들이 있습니다.
위에서 발급받은 엑세스 토큰을 사용하여 아래와 같이 쿨에스엠에스의 API를 이용할 수 있습니다.
위의 예제처럼 요청하려는 HTTP Request 의 Header 에 Authorization 값을 넣어주면 됩니다. 예를 들어 요청하려는 API 가 간단한 유저정보를 가져오는 API 라고 한다면 아래와 같이 할 수 있습니다.
정상적으로 결과가 온다면 해당 멤버 정보 데이터를 가져왔을것입니다. API Documents 를 통해 사용가능한 API 를 확인할 수 있습니다.
개발한 서비스나 앱을 등록하여 클라이언트의 아이디와 비밀번호를 발급받습니다.
개발한 서비스에 Step1 사용자 인증을 하도록 연동합니다.
로그인을 통한 쿨에스엠에스 계정 인증을 합니다.
개발한 서비스에서 필요한 권한에 대한 사용자의 인가를 받습니다.
인가된 권한이 포함된 액세스 토큰을 발급받습니다.
발급받은 액세스 토큰을 Request Header에 넣어 쿨에스엠에스 API 를 호출합니다.
이미 발급받은 엑세스 토큰에 대한 유효시간이 만료된 경우, 액세스 토큰과 같이 발급받았던 재사용 토큰을 사용하여 다시액세스 토큰을 발급받을 수 있습니다. 재사용 토큰을 사용하여 /oauth2/v1/access_token
에 아래와 같이 http request 요청합니다.
사용자 인증시 입력하는 state
는 CSRF 공격에 대해 방지할수 있습니다.
state
값은 인증과정에서 nonce
역할을 합니다.
nonce
란 어떤 요청 중에 일시적인 key
역할을 하는 단어를 말합니다.
아래의 이미지에서는 state
값에 대한 역할을 보여주고 있습니다.
OAuth2 인증시 어플리케이션에서 요구하는 권한과 실제로 사용자가 인가한 권한이 다른경우에 액세스 토큰을 사용할 경우 권한에 대한 에러가 나올수 있습니다. 이에 대한 적절한 에러 처리를 해주셔야 어플리케이션에서 문제없이 서비스 운영이 가능합니다.
예를 들어서, 어플리케이션에서 필요한 권한이 accounts:read users:read
이라고 가정하고, 인증을 하였는데 사용자가 인가한 권한이 accounts:read
일때 클라이언트에서 users:read
에 대한 API 를 접근하려고 하면 Unauthorized
에러가 발생하여 문제가 발생합니다.
이런 문제가 발생하지 않도록 어플리케이션에서는 이에 대한 에러 처리를 하거나 사용자로 하여금 권한 부족으로 서비스 사용에 문제가 있을수 있다는 메시지를 적절히 알려주어야 합니다.
Name
Type
Required
Desc
client_id
String
true
앱 생성시 발급받은 Client ID
response_type
String
true
Access Token 값을 바로 발급받을 수 있는 'token'
Authorization Code 값을 발급받을 수 있는 'code'
state
String
true
OAuth2 서버에서 각각의 요청을 구분짓는 구별 키
Name
Type
Required
Desc
grant_type
String
true
'authorization_code', 'refresh_token' 값이 있으며
토큰을 발급받을 방법에 맞게 설정가능
code
String
false
grant_type이 'authorization_code'일 때 필수값으로
Step 1에서 발급받은 authorization_code 값
client_id
String
false
grant_type이 'authorization_code'일 때 필수값으로
앱 생성시 발급받은 Client ID 값
client_secret
String
false
grant_type이 'authorization_code'일 때 필수값으로
앱 생성시 발급받은 Client Secret 값
redirect_uri
String
false
grant_type이 'authorization_code'일 때 필수값으로
앱 생성시 입력하였던 Redirect URI 값
refresh_token
String
false
grant_type이 'refresh_token'일 경우 필수값으로
첫 Access Token 발급 시 받았던 값