UNPKG

@solapi/mcp-server

Version:

MCP server for SOLAPI document search and integration

660 lines (502 loc) 23.6 kB
export const authenticationExamples = [ { id: "api-key-authentication", title: "API Key 인증 방식", category: "인증", description: "API Key와 API Secret을 사용하여 HMAC 기반 서명을 생성하여 인증하는 방식", tags: ["API Key", "HMAC", "인증", "Authorization", "Signature"], content: ` ## API Key 인증 방식 REST API를 호출할 때 HTTP 헤더의 Authorization 필드를 사용하여 인증을 진행합니다. API를 호출하려면 먼저 본인 인증이 필요합니다. 솔라피 콘솔의 [API Key 관리](https://console.solapi.com/credentials) 메뉴에서 API Key와 API Secret을 발급받아 REST API 호출에 사용할 수 있습니다. ### Authorization 헤더 형식 \`\`\`bash Authorization: <AuthenticationMethod> apiKey=<API Key>, date=<Date Time>, salt=<Salt>, signature=<Signature> \`\`\` #### 파라미터 설명 - **AuthenticationMethod**: Signature 생성 알고리즘 (HMAC-SHA256, HMAC-MD5 등 지원) - **API Key**: 발급받은 API Key - **Date Time**: 요청 시간 (ISO 8601 형식, 예: 2019-07-01T00:41:48Z) - **Salt**: 임의의 문자열 (12~64자리 사이의 영문, 숫자 문자열) - **Signature**: HMAC 해시값 (Date Time + Salt를 조합한 문자열을 API Secret으로 Key로 사용) #### Signature 생성 방법 1. **문자열 조합**: \`<Date Time> + <Salt>\` 문자열 생성 2. **HMAC 생성**: API Secret을 Key로 사용하여 HMAC 해시 생성 3. **알고리즘**: HMAC-SHA256 또는 HMAC-MD5 사용 가능 ※ **주의사항**: API Secret과 Signature 생성 로직은 외부에 노출되지 않도록 주의해야 합니다. ### 보안 고려사항 - **시간 제한**: 요청 시간은 15분 이내여야 합니다 (Replay Attack 방지) - **재전송 방지**: 15분 이내의 동일한 Signature는 재사용이 불가합니다 (서버에 저장됨) - **Salt 사용**: 매 요청마다 다른 Salt 값을 사용하여 Signature 중복을 방지합니다. ### Node.js 구현 예제 \`\`\`javascript const crypto = require('crypto'); // HMAC-SHA256 서명 생성 function generateSignature(apiSecret, dateTime, salt) { const data = dateTime + salt; return crypto .createHmac('sha256', apiSecret) .update(data) .digest('hex'); } // Authorization 헤더 생성 function createAuthHeader(apiKey, apiSecret) { const dateTime = new Date().toISOString(); const salt = crypto.randomBytes(16).toString('hex'); const signature = generateSignature(apiSecret, dateTime, salt); return \`HMAC-SHA256 apiKey=\${apiKey}, date=\${dateTime}, salt=\${salt}, signature=\${signature}\`; } // API 호출 예제 const axios = require('axios'); async function sendMessage(apiKey, apiSecret, messageData) { const authHeader = createAuthHeader(apiKey, apiSecret); try { const response = await axios.post('https://api.solapi.com/messages/v4/send-many/detail', messageData, { headers: { 'Authorization': authHeader, 'Content-Type': 'application/json' } }); return response.data; } catch (error) { console.error('API 호출 실패:', error.response?.data || error.message); throw error; } } \`\`\` ### Python 구현 예제 \`\`\`python import hmac import hashlib import secrets from datetime import datetime, timezone def generate_signature(api_secret: str, date_time: str, salt: str) -> str: """HMAC-SHA256 서명 생성""" data = date_time + salt signature = hmac.new( api_secret.encode(), data.encode(), hashlib.sha256 ).hexdigest() return signature def create_auth_header(api_key: str, api_secret: str) -> str: """Authorization 헤더 생성""" date_time = datetime.now(timezone.utc).isoformat().replace('+00:00', 'Z') salt = secrets.token_hex(16) signature = generate_signature(api_secret, date_time, salt) return f"HMAC-SHA256 apiKey={api_key}, date={date_time}, salt={salt}, signature={signature}" \`\`\` ### 오류 처리 | Error Code | 설명 | HTTP 상태 코드 | 해결 방법 | |------------|------|---------------|-----------| | InvalidAPIKey | 유효하지 않은 API Key | 403 | API Key 존재 여부 및 발급 확인 | | SignatureDoesNotMatch | Signature 불일치 | 403 | Signature 생성 과정 확인 | | RequestTimeTooSkewed | 시간 초과 (15분) | 403 | 서버의 시간 동기화 | | DuplicatedSignature | 중복된 Signature 사용 | 403 | Salt 값을 매번 다르게 생성 | ※ **참고**: 발급된 토큰은 유효시간이 15분으로 제한되어 있어 통신환경에 따라 시간이 초과될 수 있습니다. 서버의 시간을 표준시에 동기화해주세요. ` }, { id: "oauth2-authentication", title: "OAuth2 인증 방식", category: "인증", description: "OAuth 2.0을 사용한 서드파티 앱 연동 인증 방식", tags: ["OAuth2", "Access Token", "Refresh Token", "서드파티", "앱연동"], content: ` ## OAuth 2.0 인증 방식 OAuth 2.0은 사용자의 계정 정보를 직접 노출하지 않고, 제3자 애플리케이션에게 특정 리소스에 대한 접근 권한을 안전하게 위임할 수 있도록 하는 표준 인증 프로토콜입니다. ### 연동 준비 과정 - **앱 생성**: 연동할 앱을 [솔라피 콘솔 앱 관리](https://console.solapi.com/apps)에서 생성합니다. - **클라이언트 정보 확인**: 앱 생성 후 클라이언트 ID와 클라이언트 Secret을 발급받을 수 있습니다. ※ **참고**: 클라이언트 Secret은 **최초 1회만 확인 가능**하므로 안전하게 보관해야 합니다. ### Step 1: 사용자 인증 요청 솔라피 로그인 페이지로 이동하여 사용자로부터 파라미터를 받아 솔라피 계정으로 로그인 하도록 요청합니다. **Endpoint**: \`GET /oauth2/v1/authorize\` #### 요청 파라미터 - **client_id** (필수): 앱 생성 시 발급받은 클라이언트 ID - **response_type** (필수): 응답 타입 (\`code\` 또는 \`token\`) - **redirect_uri** (필수): 인증 후 리다이렉트 될 URL - **scope** (선택): 요청할 권한 범위 (공백으로 구분) - **state** (선택): CSRF 방지를 위한 임의의 문자열 #### 요청 예시 \`\`\`bash GET /oauth2/v1/authorize?client_id=your_client_id&response_type=code&redirect_uri=https://yourapp.com/callback&scope=accounts:read+users:read&state=random_string_123 HTTP/1.1 Host: api.solapi.com \`\`\` ### Step 2: 액세스 토큰 발급받기 사용자 인증 후 발급받은 \`code\`를 사용하여 액세스 토큰을 발급받을 수 있습니다. **Endpoint**: \`POST /oauth2/v1/access_token\` #### 요청 바디 \`\`\`json { "grant_type": "authorization_code", "code": "ADFKVJCK19JDFKL2KFJLS3388", "client_id": "your_client_id", "client_secret": "your_client_secret", "redirect_uri": "https://yourapp.com/callback" } \`\`\` #### 응답 예시 \`\`\`json { "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.ZwUymzWAUiTxQ...", "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.ZwUymzWAUiTxQ...", "token_type": "Bearer", "expires_in": 86400 } \`\`\` - **토큰 유효기간**: - **액세스 토큰**: 24시간 동안 유효 - **리프레시 토큰**: 만료일 없음, **최초 액세스 토큰 발급 시에만 확인 가능**하므로 안전하게 보관해야 합니다. ### Step 3: 액세스 토큰으로 API 호출하기 발급받은 액세스 토큰을 Authorization 헤더에 포함하여 솔라피 API를 호출할 수 있습니다. \`\`\`bash GET /users/v1/member HTTP/1.1 Host: api.solapi.com Authorization: Bearer eyGciOiNiIsIkpXVCJ9.eyJ0NTY3ODkwIiwibWRtaW4iOnRydWV9.TJVHrcEfxjoYZgeFONFh7HgQ \`\`\` ### 리프레시 토큰으로 액세스 토큰 갱신 액세스 토큰이 만료되었을 경우, 리프레시 토큰을 사용하여 새로운 액세스 토큰을 발급받을 수 있습니다. \`\`\`json { "grant_type": "refresh_token", "refresh_token": "eyGciOiNiIsIkpXVCJ9.eyJ0NTYDkwIwibWaW4iOnRydWV9.TVEfxjoYZgeFONFh7HgQ" } \`\`\` ### State 파라미터 활용 \`state\` 파라미터는 OAuth 2.0 인증 과정의 보안을 강화하는 데 사용됩니다: - **CSRF 공격 방지**: Cross-Site Request Forgery 공격을 방지합니다. - **상태 유지**: 인증 요청 전의 상태를 응답 시에 복원할 수 있습니다. \`\`\`javascript // State 값 생성 및 세션 저장 예제 const state = crypto.randomBytes(16).toString('hex'); sessionStorage.setItem('oauth_state', state); // OAuth URL에 state 포함 const authUrl = \`https://api.solapi.com/oauth2/v1/authorize?response_type=code&client_id=\${CLIENT_ID}&state=\${state}\`; // 리다이렉트 후 state 검증 const returnedState = req.query.state; const originalState = sessionStorage.getItem('oauth_state'); if (returnedState !== originalState) { throw new Error('State 값이 일치하지 않습니다. CSRF 공격 가능성이 있습니다.'); } \`\`\` ### 권한(Scope) 오류 처리 요청한 기능에 대한 권한이 없을 경우 API 호출 시 오류가 발생할 수 있습니다. \`\`\`javascript try { const response = await fetch('https://api.solapi.com/users/v1/member', { headers: { 'Authorization': \`Bearer \${accessToken}\` } }); if (response.status === 401) { // 권한 부족 오류 처리 showMessage('해당 계정은 권한이 부족합니다. 앱에 필요한 권한을 허용해주세요.'); disableUserFeatures(); } } catch (error) { console.error('API 호출 오류:', error); } \`\`\` ` }, { id: "oauth2-scopes", title: "OAuth2 권한 목록", category: "인증", description: "SOLAPI OAuth2에서 사용할 수 있는 권한(Scope) 목록 및 설명", tags: ["OAuth2", "Scope", "권한", "API", "접근제어"], content: ` ## OAuth2 권한(Scope) 목록 SOLAPI OAuth2에서 사용할 수 있는 권한(Scope) 목록입니다. 각 권한은 특정 API에 접근할 수 있는 권한을 정의합니다. ### 주요 권한 목록 #### 계정 정보 조회 - **users:read**: 회원 정보를 포함한 사용자 정보를 조회합니다. - **accounts:read**: 계정 정보 조회 #### 발신번호 관리 - **senderid:read**: 발신번호 조회 - **senderid:write**: 발신번호 등록 / 수정 / 삭제 - **role-senderid:read**: 발신번호 조회(에이전트) - **role-senderid:write**: 발신번호 등록 / 수정 / 삭제(에이전트) #### 메시지 관리 - **message:read**: 메시지 내역 및 예약 조회 - **message:write**: 메시지 발송 - **role-message:read**: 메시지 내역 및 예약 조회(에이전트) - **role-message:write**: 메시지 발송(에이전트) #### 충전/결제 - **cash:read**: 캐시 잔액, 요금 조회 - **cash:write**: 카드 등록, 캐시 충전, 환불 - **role-cash:read**: 캐시 잔액, 요금 조회(에이전트) - **role-cash:write**: 카드 등록, 캐시 충전, 환불(에이전트) #### 이미지 - **images:read**: 이미지 조회 - **images:write**: 이미지 업로드 - **role-images:read**: 이미지 조회(에이전트) - **role-images:write**: 이미지 업로드(에이전트) #### 카카오톡 - **kakao:read**: 카카오톡 채널 정보 조회 - **kakao:write**: 카카오톡 채널 정보 수정 및 삭제 - **role-kakao:read**: 카카오톡 채널 정보 조회(에이전트) - **role-kakao:write**: 카카오톡 채널 정보 수정 및 삭제(에이전트) #### 파일 스토리지 - **storage:read**: 계정 파일 조회 - **storage:write**: 계정 파일 업로드 - **role-storage:read**: 계정 파일 조회(에이전트) - **role-storage:write**: 계정 파일 업로드(에이전트) #### 기타 권한 - **pricing:read**: 계정 요금 조회 - **notification:read**: 알림 내역 조회 - **coolog:read**: 계정 로그 조회 - **iam:read**: 계정 인증정보 조회 - **iam:write**: 계정 인증정보 수정 ### 권한 요청 예제 #### 기본 권한 요청 \`\`\`javascript const authUrl = \`https://api.solapi.com/oauth2/v1/authorize?\` + \`client_id=\${CLIENT_ID}&\` + \`response_type=code&\` + \`redirect_uri=\${REDIRECT_URI}&\` + \`scope=users:read accounts:read message:read\`; \`\`\` #### 메시지 발송 권한 요청 \`\`\`javascript const authUrl = \`https://api.solapi.com/oauth2/v1/authorize?\` + \`client_id=\${CLIENT_ID}&\` + \`response_type=code&\` + \`redirect_uri=\${REDIRECT_URI}&\` + \`scope=users:read message:write senderid:read\`; \`\`\` ### 권한별 API 호출 예제 #### 계정 정보 조회 (users:read 권한 필요) \`\`\`javascript const response = await fetch('https://api.solapi.com/users/v1/member', { headers: { 'Authorization': \`Bearer \${accessToken}\` } }); \`\`\` #### 메시지 발송 (message:write 권한 필요) \`\`\`javascript const response = await fetch('https://api.solapi.com/messages/v4/send-many/detail', { method: 'POST', headers: { 'Authorization': \`Bearer \${accessToken}\`, 'Content-Type': 'application/json' }, body: JSON.stringify({ message: { to: '01012345678', from: '01087654321', text: '안녕하세요. 테스트 메시지입니다.' } }) }); \`\`\` ### 권한 부족 오류 처리 권한이 없는 경우 401 Unauthorized 오류가 발생합니다: \`\`\`javascript try { const response = await fetch(apiUrl, { headers: { 'Authorization': \`Bearer \${accessToken}\` } }); if (response.status === 401) { console.error('권한이 부족합니다. 필요한 스코프를 요청해야 합니다.'); // 권한 부족으로 인한 기능 제한 처리 } } catch (error) { console.error('API 호출 오류:', error); } \`\`\` ### 주의사항 1. **최소 권한 원칙**: 필요한 기능에 대한 최소한의 권한만 요청하세요. 2. **권한 설명**: 사용자에게 각 권한이 필요한 이유를 명확하게 설명하세요. 3. **에이전트 권한**: \`role-\` 접두사가 붙은 권한은 계정 내 에이전트 권한으로 동작합니다. 4. **앱 설정 확인**: 원하는 권한은 앱 설정에서 사용할 수 있도록 설정해야 합니다. ` }, { id: "sso-authentication", title: "SSO 인증 방식", category: "인증", description: "Single Sign-On을 사용한 통합된 인증 방식", tags: ["SSO", "Single Sign-On", "토큰", "통합", "로그인"], content: ` ## SSO 인증 방식 싱글 사인온(Single Sign-On, SSO)은 한 번의 로그인으로 여러 서비스에 접근할 수 있도록 하여, 솔라피에서 발급한 토큰으로 앱에서 API를 호출할 수 있는 통합된 로그인 인증 방식입니다. ### SSO란? 솔라피에서 SSO 토큰을 발급받아, SSO 토큰을 통해 토큰 생성 과정 없이 API 통신을 합니다. ### SSO 인증 절차 1. **SSO 토큰 발급**: [SSO API Reference](https://docs.solapi.com/api-reference/api-sso)를 참고하여 토큰 발급 2. **IP 허용 설정**: 앱에 허용된 IP에서만 통신이 가능하도록 설정 3. **API 호출**: 발급받은 SSO 토큰으로 API 호출 ### SSO 토큰을 사용한 API 호출하기 발급받은 SSO 토큰을 사용하여 솔라피의 API를 통신할 수 있습니다. #### 기본 형식 \`\`\`bash curl -X (GET|POST) https://api.solapi.com/<호출하려는 API url> \\ -H 'Authorization: sso <SSO Token>' \`\`\` #### 회원 정보 조회 예제 \`\`\`bash curl -X GET https://api.solapi.com/users/v1/member \\ -H 'authorization: sso eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcHBJZCI6IkRvM2VOQ2ZvdUFCcSIsIm1lbWJlcklkIjoiTUVNVXdnX0d2SEVNcjQiLCJhY2NvdW50SWQiOiIyMTA3MjIxOTY1Mzg2NyIsImlhdCI6MTYyNzIyMjUxMn0.Eh_hXbqhfTC00QDvF4HrLgXnUqEsT80c6-r3qM6vfff' \`\`\` ### JavaScript/Node.js 예제 \`\`\`javascript const axios = require('axios'); async function callSolapiWithSSO(ssoToken, endpoint) { try { const response = await axios.get(\`https://api.solapi.com\${endpoint}\`, { headers: { 'Authorization': \`sso \${ssoToken}\` } }); return response.data; } catch (error) { console.error('SSO API 호출 오류:', error.response?.data || error.message); throw error; } } // 사용 예제 const ssoToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...'; const userInfo = await callSolapiWithSSO(ssoToken, '/users/v1/member'); \`\`\` ### Python 예제 \`\`\`python import requests def call_solapi_with_sso(sso_token: str, endpoint: str): """SSO 토큰을 사용하여 솔라피 API 호출""" headers = { 'Authorization': f'sso {sso_token}' } response = requests.get(f'https://api.solapi.com{endpoint}', headers=headers) response.raise_for_status() return response.json() # 사용 예제 sso_token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' user_info = call_solapi_with_sso(sso_token, '/users/v1/member') \`\`\` ### 주요 특징 1. **IP 제한**: 앱에 허용된 IP에서만 호출 가능 2. **통합된 인증**: 한번의 인증으로 여러 기능 사용 3. **토큰 기반**: JWT 토큰 형식의 SSO 토큰 사용 4. **보안**: IP 화이트리스팅으로 보안 수준 향상 ### 인증 방식 비교 | 인증 방식 | 주요 대상 | 특징 | |----------|-----------|------| | **API Key** | 서버-서버 통신 | HMAC 기반, 높은 보안 | | **OAuth2** | 서드파티 앱 통신 | 권한 위임, 서드파티 앱 | | **SSO** | 내부 시스템 연동 | IP 제한, 통합된 인증 | ### 관련 문서 - [SSO API Reference](https://docs.solapi.com/api-reference/api-sso) - [REST API Documents](https://docs.solapi.com/rest-api-reference/overview) - [1:1 문의](https://support.solapi.com/hc/ko/requests/new) ### 주의사항 ※ **보안 고려사항**: - SSO 토큰은 안전하게 보관해야 합니다. - IP 화이트리스팅 설정을 통해 접근을 제한해야 합니다. - 토큰이 탈취될 경우 즉시 재발급 받아야 합니다. - 주기적으로 토큰을 갱신해야 합니다. ` }, { id: "authentication-overview", title: "인증 방식 개요", category: "인증", description: "SOLAPI에서 제공하는 다양한 인증 방식에 대한 소개 및 비교", tags: ["인증", "API Key", "OAuth2", "SSO", "개요", "비교"], content: ` ## 인증 방식 개요 SOLAPI는 [솔라피닷컴](https://solapi.com) 서비스와 연동하여 다양한 기능을 사용할 수 있는 API를 제공합니다. API 사용을 위해서는 **반드시 먼저 사용자 인증(Authorization)**이 필요하며, SOLAPI는 세 가지 종류의 인증 방식을 제공합니다: ### 인증 방식 종류 | 인증 방식 | 주요 목적 | 특징 | |----------|-----------|------| | **[API Key 인증](./api-key)** | 서버-서버 통신 | 높은 보안의 인증 방식 | | **[OAuth2 인증](./oauth2-3/oauth2)** | 서드파티 앱 통신 | 서드파티 앱 연동 인증 방식 | | **[SSO 인증](./authentication-sso)** | 내부 시스템 연동 | 통합된 인증 방식 | ### 인증 방식 선택 가이드 #### 1. API Key 인증 - 높은 보안 **권장 상황**: 서버 환경에서 높은 보안 수준의 솔라피 API를 사용하고 싶을 때 **특징**: - HMAC 기반 보안 인증 - API Key와 Secret을 이용한 Signature 생성 - 발급 즉시 사용 가능 - 가장 보안성이 높음 **구체적인 사용 사례**: - 자체적으로 SMS 발송기능 구현 - 1회성 시스템에서 알림 메시지 발송 - 정기 배치작업에서 상태 메시지 발송 #### 2. OAuth2 인증 - 서드파티 앱 **권장 상황**: 다른 사용자의 계정을 대신하여 API를 사용하는 앱을 개발하고 싶을 때 **특징**: - 표준 OAuth 2.0 프로토콜 - 사용자 동의 기반 권한 위임 - 서드파티 앱 생성 필요 - Scope 기반 세분화된 권한 제어 **구체적인 사용 사례**: - 메시지 발송 대행 서비스 - CRM 시스템과 연동 - 쇼핑몰 솔루션 연동 #### 3. SSO 인증 - 내부 시스템 연동 **권장 상황**: 그룹웨어 등 내부 시스템에서 단일 인증을 사용하고 싶을 때 **특징**: - 통합된 로그인 환경 - IP 제한 기반 접근 제어 - 솔라피 로그인으로 연동 기능 사용 **구체적인 사용 사례**: - 그룹웨어 내부 시스템 - 사내 어드민 - 내부 관리 및 모니터링 ### SOLAPI API 사용을 위한 5가지 필수 조건 API 사용 시 아래 5가지 조건이 모두 충족되어야 합니다: #### 1. 계정 권한 (OAuth2 해당) 서드파티 앱 개발 시 사용자가 보유한 권한을 사용할 수 있습니다: - **계정 접근 권한**: 사용자의 특정 정보 조회 - **계정 로그 권한**: 사용자의 로그 발송 및 조회 ※ **주의사항**: - 필요 권한 확인: 각 API마다 필요한 권한을 확인해야 함 - 권한 허용 필수: 사용자가 권한을 허용하지 않으면 해당 API 사용 불가 - 최소한의 권한 요청 원칙: 최소한의 권한 요청은 사용자의 앱 사용률을 높임 #### 2. 멤버 역할 각 멤버의 역할에 따라 API 사용이 제한됩니다: | 역할 | 권한 범위 | 특징 | |------|-----------|------| | **OWNER** | 모든 권한 | 계정의 모든 기능 사용 가능 | | **DEVELOPER** | 개발 권한 | API 호출 및 개발 (일부 기능 제한) | | **MEMBER** | 기본 권한 | 제한된 기본기능 사용 가능 | #### 3. 계정 상태 | 상태 | API 호출 가능 여부 | 특징 | |------|-------------------|------| | **ACTIVE** | 가능 | 정상 사용중인 계정 | | **INACTIVE** | 불가 (인증 및 서비스 제한) | 휴면 계정 (1년 이상 미사용) | | **DELETED** | 불가 (서비스 불가) | 탈퇴한 계정 | #### 4. 멤버 상태 | 상태 | API 호출 가능 여부 | 특징 | |------|-------------------|------| | **UNVERIFIED** | 제한적 호출 | 휴대폰 본인 인증 미완료 | | **ACTIVE** | 가능 | 정상 사용중인 계정 | | **INACTIVE** | 불가 (인증 및 서비스 제한) | 휴면 멤버 (1년 이상 미사용) | | **DELETED** | 불가 (서비스 불가) | 탈퇴한 멤버 | #### 5. 계정 인증 계정 상태 및 멤버 상태에 따라 결정됩니다: | 인증 상태 | 가능 | 대상 | |----------|------|------| | **개인 인증** | 개인 사용자 | 개인 기반 인증 | | **사업자 인증** | 기업/사업자 | 사업자등록증 기반 인증 | ### 인증 방식별 구현 가이드 각 인증 방식의 상세한 구현 방법은 아래 문서를 참고하세요: 1. **[API Key 인증 구현](./api-key)**: HMAC 기반 인증 구현 방법 2. **[OAuth2 인증 구현](./oauth2-3/oauth2)**: OAuth 2.0 흐름 구현 방법 3. **[SSO 인증 구현](./authentication-sso)**: SSO 토큰을 사용한 인증 방식 4. **[OAuth2 권한 목록](./oauth2-3/scope)**: 전체 권한(Scope) 목록 ### 보안 고려사항 모든 인증 방식에서 공통적으로 고려해야 할 보안 사항: 1. **토큰/키 보안**: API 키, Secret, 토큰은 안전하게 보관 2. **HTTPS 사용**: 모든 API 통신은 HTTPS를 통해 암호화 3. **권한 최소화**: 필요한 최소한의 권한만 요청 4. **주기적 갱신**: 토큰 등을 주기적으로 갱신 5. **로그 모니터링**: API 호출 로그를 모니터링하여 이상 탐지 ` } ]; //# sourceMappingURL=authenticationExamples.js.map