การยืนยันตัวตน: คีย์ API และ OAuth
โทเค็นผู้ถือ ส่วนหัวคีย์ API และโฟลว์ OAuth2 สำหรับเข้าถึง API ของตัวแทน
การยืนยันตัวตน: คีย์ API และ OAuth เป็นบทเรียน AI Agents ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AI Agents และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดการยืนยันตัวตนจึงสำคัญสำหรับเอเจนต์
เมื่อเอเจนต์เรียกใช้ API ภายนอก เซิร์ฟเวอร์จำเป็นต้องรู้ว่าใครเป็นผู้ส่งคำขอ การยืนยันตัวตนใช้พิสูจน์ว่าเป็นใคร ส่วน การอนุญาตสิทธิ์ใช้กำหนดว่าทำอะไรได้บ้าง หากไม่มีการยืนยันตัวตนและการอนุญาตสิทธิ์ที่เหมาะสม ทุกคำขอจะส่งคืน 401 Unauthorized และเอเจนต์ของคุณจะทำอะไรไม่ได้
รูปแบบหลักสองแบบที่ใช้กันมากในการพัฒนาเอเจนต์คือ คีย์ API และ OAuth 2.0
import requests
# Without auth — will get 401
response = requests.get('https://api.openai.com/v1/models')
print(response.status_code) # 401 Unauthorized
# With API key in header — works
headers = {'Authorization': 'Bearer sk-proj-abc123'}
response = requests.get(
'https://api.openai.com/v1/models',
headers=headers
)
print(response.status_code) # 200คีย์ API ในส่วนหัว Authorization
รูปแบบที่ใช้กันมากที่สุดคือการส่งคีย์ API ในส่วนหัว Authorization ในรูปแบบ โทเค็น Bearer คำว่า "Bearer" เป็นสัญญาณว่าผู้ใดก็ตามที่มีโทเค็นนี้ได้รับอนุญาต เพราะเซิร์ฟเวอร์เชื่อถือผู้ถือคีย์
รูปแบบนี้ใช้โดย OpenAI, Anthropic, GitHub และ API สมัยใหม่ส่วนใหญ่
import requests
import os
api_key = os.environ['OPENAI_API_KEY']
response = requests.post(
'https://api.openai.com/v1/chat/completions',
headers={
'Authorization': f'Bearer {api_key}',
'Content-Type': 'application/json'
},
json={
'model': 'gpt-4o-mini',
'messages': [{'role': 'user', 'content': 'Hello!'}]
}
)
print(response.json()['choices'][0]['message']['content'])คีย์ API ในส่วนหัวแบบกำหนดเอง (X-API-Key)
API บางแห่ง โดยเฉพาะ API รุ่นเก่าหรือ API ภายใน ใช้ส่วนหัวแบบกำหนดเอง เช่น X-API-Key แทน Authorization: Bearer รูปแบบการใช้งานเหมือนกัน เพียงแต่ใช้ชื่อส่วนหัวต่างกัน โปรดตรวจสอบเอกสาร API เพื่อดูชื่อส่วนหัวที่ต้องใช้ให้ถูกต้องเสมอ
import requests
import os
api_key = os.environ['SERVICE_API_KEY']
response = requests.get(
'https://api.someservice.com/v1/data',
headers={
'X-API-Key': api_key,
'Accept': 'application/json'
}
)
if response.status_code == 200:
data = response.json()
print('Got data:', data)
elif response.status_code == 401:
print('Invalid API key — check X-API-Key header')การจัดเก็บข้อมูลรับรองในตัวแปรสภาพแวดล้อม
อย่าเขียนคีย์ API ลงในซอร์สโค้ดโดยตรง หากคุณส่งคีย์ขึ้นคลังโค้ดสาธารณะ บอตจะค้นพบและนำไปใช้ในทางที่ผิดภายในไม่กี่วินาที วิธีที่ถูกต้องคือจัดเก็บข้อมูลรับรองไว้ใน ตัวแปรสภาพแวดล้อม และอ่านค่าเมื่อทำงานด้วย os.environ
ใช้ os.environ.get() พร้อมข้อความแสดงข้อผิดพลาดที่ชัดเจนเมื่อไม่มีคีย์
import os
os.environ['OPENAI_API_KEY'] = 'sk-proj-abc123xyz789' # simulate a set env var
api_key = os.environ.get('OPENAI_API_KEY')
if not api_key:
raise EnvironmentError(
'OPENAI_API_KEY environment variable not set. '
'Run: export OPENAI_API_KEY=your-key-here'
)
print('API key loaded from environment (never hard-code it in source)')การใช้ python-dotenv สำหรับการพัฒนาในเครื่อง
ระหว่างการพัฒนา ให้เก็บคีย์ไว้ในไฟล์ .env ที่โฟลเดอร์รากของโครงการ ใช้ไลบรารี python-dotenv เพื่อโหลดคีย์โดยอัตโนมัติ เพิ่ม .env ลงใน .gitignore เพื่อป้องกันไม่ให้ไฟล์นี้ถูกส่งขึ้นคลังโค้ด
# .env file (never commit this!)
# OPENAI_API_KEY=sk-proj-abc123
# ANTHROPIC_API_KEY=sk-ant-xyz456
# GITHUB_TOKEN=ghp_abc789
# In your Python code:
from dotenv import load_dotenv
import os
load_dotenv() # loads .env into os.environ
openai_key = os.environ['OPENAI_API_KEY']
anthropic_key = os.environ['ANTHROPIC_API_KEY']
github_token = os.environ['GITHUB_TOKEN']
print('Keys loaded successfully')OAuth 2.0 คืออะไร
OAuth 2.0 เป็นมาตรฐานสำหรับการอนุญาตสิทธิ์แบบมอบหมาย แทนที่จะให้รหัสผ่านของผู้ใช้แก่เอเจนต์ OAuth เปิดโอกาสให้ผู้ใช้ อนุญาต เอเจนต์ของคุณให้ดำเนินการแทน โดยจำกัดขอบเขตและช่วงเวลาไว้ รูปแบบนี้ใช้โดย Google, GitHub, Slack และ Salesforce
แนวคิดสำคัญคือ หลังจากผ่านขั้นตอนการอนุญาตสิทธิ์แล้ว เอเจนต์จะได้รับ โทเค็นการเข้าถึง จากนั้นจึงใช้โทเค็นดังกล่าวเรียก API
# OAuth flow overview:
#
# 1. Agent redirects user to:
# https://auth.provider.com/oauth/authorize
# ?client_id=YOUR_CLIENT_ID
# &redirect_uri=http://localhost:8080/callback
# &scope=read:repo%20write:issues
# &response_type=code
#
# 2. User logs in and grants permission
# 3. Provider redirects to your callback with ?code=AUTH_CODE
# 4. Agent exchanges code for access_token
# 5. Agent uses access_token for API calls
print('OAuth flow: authorize -> code -> token -> API calls')โฟลว์ข้อมูลรับรองไคลเอ็นต์ OAuth2
โฟลว์ข้อมูลรับรองไคลเอ็นต์ เป็นโฟลว์ OAuth ที่เรียบง่ายที่สุดสำหรับเอเจนต์ โดยไม่ต้องมีการโต้ตอบกับผู้ใช้ เอเจนต์ของคุณจะยืนยันตัวตนด้วยรหัสไคลเอ็นต์และข้อมูลลับของตัวเองเพื่อรับโทเค็น วิธีนี้ใช้สำหรับการสื่อสารระหว่างเครื่องกับเครื่อง (M2M)
คุณส่งข้อมูลรับรองด้วย POST ไปยังจุดปลายทางโทเค็น และได้รับโทเค็นการเข้าถึงที่มีอายุสั้น
import requests
import os
client_id = os.environ['OAUTH_CLIENT_ID']
client_secret = os.environ['OAUTH_CLIENT_SECRET']
token_url = 'https://auth.example.com/oauth/token'
# Request an access token
response = requests.post(token_url, data={
'grant_type': 'client_credentials',
'client_id': client_id,
'client_secret': client_secret,
'scope': 'read:data write:tasks'
})
token_data = response.json()
access_token = token_data['access_token']
expires_in = token_data['expires_in'] # seconds
print(f'Token valid for {expires_in}s')การใช้โทเค็น OAuth ในการเรียก API
เมื่อมีโทเค็นการเข้าถึง OAuth แล้ว ให้ใช้เหมือนคีย์ API ทุกประการ โดยใส่ไว้ในส่วนหัว Authorization: Bearer ความแตกต่างคือโทเค็น OAuth หมดอายุ ดังนั้นเอเจนต์ของคุณต้องจัดการการต่ออายุโทเค็นก่อนทำการเรียก
import requests
import os
import time
class OAuthClient:
def __init__(self, client_id, client_secret, token_url):
self.client_id = client_id
self.client_secret = client_secret
self.token_url = token_url
self.access_token = None
self.token_expiry = 0
def get_token(self):
if time.time() < self.token_expiry - 60: # 60s buffer
return self.access_token
r = requests.post(self.token_url, data={
'grant_type': 'client_credentials',
'client_id': self.client_id,
'client_secret': self.client_secret
})
data = r.json()
self.access_token = data['access_token']
self.token_expiry = time.time() + data['expires_in']
return self.access_token
def get(self, url):
token = self.get_token()
return requests.get(url, headers={'Authorization': f'Bearer {token}'})OAuth 2.0 ด้วยไลบรารี google-auth
สำหรับ API ของ Google ไลบรารี google-auth จัดการความซับซ้อนทั้งหมดของ OAuth ให้คุณ ไลบรารีนี้จัดการต่ออายุโทเค็นโดยอัตโนมัติ อ่านข้อมูลรับรองจากไฟล์ JSON และแนบโทเค็นไปกับคำขอผ่าน AuthorizedSession
from google.oauth2 import service_account
from google.auth.transport.requests import AuthorizedSession
# Load service account credentials from JSON file
credentials = service_account.Credentials.from_service_account_file(
'service-account.json',
scopes=[
'https://www.googleapis.com/auth/gmail.readonly',
'https://www.googleapis.com/auth/calendar.events'
]
)
# AuthorizedSession auto-refreshes tokens
session = AuthorizedSession(credentials)
response = session.get(
'https://www.googleapis.com/gmail/v1/users/me/messages'
)
print(response.json())แนวทางปฏิบัติที่ดีที่สุดด้านความปลอดภัยของคีย์ API
การปกป้องคีย์ API มีความสำคัญอย่างยิ่งต่อความปลอดภัยของเอเจนต์ โปรดปฏิบัติตามกฎเหล่านี้:
- เก็บคีย์ไว้ในตัวแปรสภาพแวดล้อมหรือตัวจัดการข้อมูลลับ (AWS Secrets Manager, HashiCorp Vault)
- อย่าบันทึกคีย์ลงในบันทึก — ให้ปกปิดคีย์ในผลลัพธ์
- หมุนเวียนคีย์เป็นประจำ และเพิกถอนคีย์ที่ถูกบุกรุกทันที
- ใช้หลักสิทธิ์น้อยที่สุด — ขอเฉพาะขอบเขตที่เอเจนต์จำเป็นต้องใช้
- กำหนดรายการอนุญาต IP ให้กับคีย์ API เมื่อผู้ให้บริการรองรับ
import os
os.environ['OPENAI_API_KEY'] = 'sk-proj-abc123xyz789'
def get_key(env_var):
key = os.environ.get(env_var)
if not key:
raise EnvironmentError(f'Missing required env var: {env_var}')
return key
def mask_key(key):
if len(key) < 8:
return '***'
return key[:4] + '...' + key[-4:]
api_key = get_key('OPENAI_API_KEY')
print(f'Using key: {mask_key(api_key)}')การจัดการ 401 ไม่ได้รับอนุญาตในเอเจนต์ของคุณ
เมื่อเอเจนต์ได้รับการตอบกลับ 401 Unauthorized จะต้องไม่ลองใหม่โดยไม่ตรวจสอบ — การทำเช่นนั้นสิ้นเปลืองโควตาการจำกัดอัตรา แต่ให้ตรวจสอบว่าโทเค็นหมดอายุหรือไม่ (ลองต่ออายุ) หรือคีย์ไม่ถูกต้องหรือไม่ (แจ้งเตือนทันทีเพื่อให้มนุษย์แก้ไขได้)
import requests
import os
def call_api_with_auth_check(url, api_key):
response = requests.get(
url,
headers={'Authorization': f'Bearer {api_key}'}
)
if response.status_code == 401:
error = response.json().get('error', {})
code = error.get('code', 'unknown')
if code == 'token_expired':
print('Token expired — refresh needed')
# trigger token refresh flow
else:
raise PermissionError(
f'API key rejected: {error.get("message", "401 Unauthorized")}'
)
response.raise_for_status()
return response.json()ตรวจสอบความเข้าใจอย่างรวดเร็ว: การจัดเก็บคีย์ API
ทดสอบความเข้าใจเกี่ยวกับการจัดการข้อมูลรับรอง
สรุปการยืนยันตัวตน
คุณได้เรียนรู้รูปแบบการยืนยันตัวตนหลักสำหรับเอเจนต์แล้ว:
- คีย์ API — ส่งผ่านส่วนหัว
Authorization: Bearer TOKENหรือX-API-Keyซึ่งเรียบง่ายและไม่มีสถานะ - OAuth 2.0 — โฟลว์ข้อมูลรับรองไคลเอ็นต์สำหรับ M2M โทเค็นหมดอายุและต้องต่ออายุ
- เก็บคีย์ไว้ใน ตัวแปรสภาพแวดล้อม เสมอ อย่าเก็บไว้ในซอร์สโค้ด
- ใช้ python-dotenv ในเครื่อง และใช้ตัวแปรสภาพแวดล้อมหรือตัวจัดการข้อมูลลับในระบบใช้งานจริง
- จัดการ การตอบกลับ 401 โดยตรวจสอบว่าโทเค็นหมดอายุหรือคีย์ไม่ถูกต้อง
การจัดการการยืนยันตัวตนที่รัดกุมเป็นรากฐานของเอเจนต์ที่เชื่อถือได้ทุกตัว
คำถามที่พบบ่อย
บทเรียน “การยืนยันตัวตน: คีย์ API และ OAuth” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การยืนยันตัวตน: คีย์ API และ OAuth” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AI Agents ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การยืนยันตัวตน: คีย์ API และ OAuth”
โทเค็นผู้ถือ ส่วนหัวคีย์ API และโฟลว์ OAuth2 สำหรับเข้าถึง API ของตัวแทน คุณปฏิบัติ AI Agents ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AI Agents หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน AI Agents บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การยืนยันตัวตน: คีย์ API และ OAuth” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน AI Agents นี้ได้ไหม
ได้ บทเรียน AI Agents ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พื้นฐาน REST API สำหรับนักพัฒนาตัวแทน
- การยืนยันตัวตน: คีย์ API และ OAuth
- การจัดการการตอบกลับและข้อผิดพลาดของ API
- การจำกัดอัตราและตรรกะการลองใหม่