사용자가 서비스에서 로그인을 시도할 때, Works 앱으로 푸시 알림을 보내 본인임을 증명하는 방식의 인증을 제공합니다. 전체적인 흐름은 다음과 같습니다.
*인증 서비스이므로 암호화 통신과 인증키 사용 등 보안성을 염두에 두고 설계하였습니다.
*이 API는 네이버 공식 API가 아닙니다. 자체 제작이므로 버그나 오류가 있을(많을) 수 있습니다
인증 서버 기본 URL: https://sap.mdvplab.com:5003
| 엔드포인트 | HTTP 메서드 | 설명 | API 키 |
|---|---|---|---|
/api/request-auth |
POST |
새로운 본인 인증 요청 시작 | 필요 |
/api/auth/status/<request_id> |
GET |
특정 인증 요청의 현재 상태 조회 | 불필요 |
/api/logs |
GET |
(관리자용) 인증 로그 조회 | 필요 |
/verify/<request_id> |
GET |
(Works 앱 내부용) 인증 확인 웹페이지 | 불필요 |
/api/auth/confirm_form |
POST |
(Works 앱 내부용) 사용자 응답 처리 | 불필요... |
보안이 필요한 엔드포인트는 사내에서 발급된 API 키를 통한 인증이 필요합니다. API 키는 HTTP 요청 헤더에 X-Api-Key 라는 이름으로 포함하여 전송해야 합니다.
사용자가 인증을 시작할 때, 클라이언트의 백엔드 서버에서 인증 서버의 /api/request-auth로 POST 요청을 보냅니다.
https://sap.mdvplab.com:5003/api/request-authPOSTContent-Type: application/json, X-Api-Key: [API Key]{
"email": "user.name@thundersoft.com",
"target_url": "https://your-service.com/callback"
}
{
"request_id": "a1b2c3d4-e5f6-...",
"verify_url": "https://sap.mdvplab.com:5003/verify/a1b2c3d4-e5f6-..."
}
요청이 성공하면, 클라이언트 백엔드는 응답으로 받은 request_id와 email 정보를 프론트엔드(브라우저)로 전달하여 다음 단계를 준비시킵니다.
터미널에서 아래와 같이 cURL 명령어를 사용하여 API를 직접 호출하고 테스트해 볼 수 있습니다. -k 옵션은 SSL 인증서 검증을 건너뛰기 위해 사용됩니다.
curl -k -X POST \
https://sap.mdvplab.com:5003/api/request-auth \
-H "Content-Type: application/json" \
-H "X-Api-Key: YOUR_API_KEY_HERE" \
-d '{
"email": "YOUR_EMAIL_ADDRESS",
"target_url": "https://sap.mdvplab.com:1443/signon/auth_demo_client.php"
}'
브라우저는 백엔드로부터 전달받은 request_id를 사용하여, 주기적으로 인증 서버에 상태를 직접 확인(폴링)합니다.
https://sap.mdvplab.com:5003/api/auth/status/[request_id]GETstatus 값에 따라 다른 정보가 반환됩니다.
{"status": "pending"}{
"status": "approved",
"email": "user.name@thundersoft.com",
"target_url": "https://your-service.com/callback",
"user_id": "Works 사용자 고유 ID",
"display_name": "사용자 이름(직책)"
}
{"status": "rejected"}, {"status": "expired"} 등폴링은 보통 3~5초 간격으로 호출하며, status가 'pending'이 아닌 다른 값으로 바뀌면 중단합니다.
폴링을 통해 status가 'approved'인 것을 확인하면, 인증이 완료된 것입니다. 클라이언트는 이 시점에서 후속 처리를 진행합니다.
'approved' 응답에 포함된 email, user_id 등의 정보를 바탕으로 서비스의 로그인 세션을 생성합니다.