0Pricing
AI Agents · Pelajaran

Autentikasi: Kunci API dan OAuth

Token bearer, header kunci API, dan alur OAuth2 untuk akses API agen.

Autentikasi: Kunci API dan OAuth adalah pelajaran AI Agents gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Agents, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Agents mencakup 4 pelajaran total.

Mengapa Autentikasi Penting bagi Agen

Ketika agen Anda memanggil API eksternal, server perlu mengetahui siapa yang membuat permintaan tersebut. Autentikasi membuktikan identitas; otorisasi menentukan tindakan yang dapat Anda lakukan. Tanpa autentikasi dan otorisasi yang benar, setiap permintaan mengembalikan 401 Unauthorized dan agen Anda tidak dapat melakukan apa pun.

Dua pola yang paling banyak digunakan dalam pengembangan agen adalah kunci API dan 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

Kunci API di Header Otorisasi

Pola yang paling umum adalah mengirimkan kunci API di header Authorization sebagai token Bearer. Kata "Bearer" menandakan bahwa siapa pun yang memiliki token ini diberi otorisasi — server memercayai pemegang kunci tersebut.

Pola ini digunakan oleh OpenAI, Anthropic, GitHub, dan sebagian besar API modern.

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'])

Kunci API di Header Kustom (X-API-Key)

Beberapa API — terutama API lama atau internal — menggunakan header kustom seperti X-API-Key alih-alih Authorization: Bearer. Polanya sama, hanya nama header-nya yang berbeda. Selalu periksa dokumentasi API untuk mengetahui nama header yang diharapkan secara tepat.

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')

Menyimpan Kredensial dalam Variabel Lingkungan

Jangan pernah menanamkan kunci API langsung dalam kode sumber. Jika Anda mengirimkan kunci ke repositori publik, bot akan menemukan dan menyalahgunakannya dalam hitungan detik. Pola yang benar adalah menyimpan kredensial dalam variabel lingkungan dan membacanya saat program dijalankan dengan os.environ.

Gunakan os.environ.get() dan tampilkan pesan kesalahan yang jelas jika kunci tidak ada.

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)')

Menggunakan python-dotenv untuk Pengembangan Lokal

Selama pengembangan, simpan kunci Anda dalam berkas .env di direktori utama proyek. Gunakan pustaka python-dotenv untuk memuatnya secara otomatis. Tambahkan .env ke .gitignore agar berkas tersebut tidak pernah dikirim ke repositori.

# .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')

Apa Itu OAuth 2.0?

OAuth 2.0 adalah standar untuk otorisasi terdelegasi. Alih-alih memberikan kata sandi pengguna kepada agen Anda, OAuth memungkinkan pengguna memberi otorisasi kepada agen Anda untuk bertindak atas nama mereka, dengan cakupan terbatas dan jangka waktu tertentu. Standar ini digunakan oleh Google, GitHub, Slack, dan Salesforce.

Konsep utamanya: agen Anda mendapatkan token akses setelah alur otorisasi, lalu menggunakan token tersebut untuk melakukan panggilan 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')

Alur Kredensial Klien OAuth2

Alur kredensial klien adalah alur OAuth paling sederhana untuk agen—tidak memerlukan interaksi pengguna. Agen Anda melakukan autentikasi menggunakan ID klien dan rahasianya sendiri untuk mendapatkan token. Alur ini digunakan untuk komunikasi mesin-ke-mesin (M2M).

Anda mengirim kredensial melalui POST ke titik akhir token, lalu menerima token akses berumur singkat.

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')

Menggunakan Token OAuth dalam Panggilan API

Setelah memiliki token akses OAuth, gunakan token tersebut seperti kunci API—di dalam header Authorization: Bearer. Perbedaannya, token OAuth memiliki masa berlaku, sehingga agen Anda harus menangani pembaruan token sebelum melakukan panggilan.

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 dengan Pustaka Autentikasi Google

Untuk API Google, pustaka autentikasi Google menangani seluruh kerumitan OAuth untuk Anda. Pustaka ini mengelola pembaruan token secara otomatis, membaca kredensial dari berkas JSON, dan menyertakan token ke dalam permintaan melalui 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())

Praktik Terbaik Keamanan Kunci API

Melindungi kunci API sangat penting bagi keamanan agen. Ikuti aturan berikut:

  • Simpan kunci dalam variabel lingkungan atau pengelola rahasia (AWS Secrets Manager, HashiCorp Vault)
  • Jangan pernah mencatat kunci—samarkan kunci dalam keluaran
  • Ganti kunci secara berkala dan segera cabut kunci yang telah disusupi
  • Gunakan prinsip hak akses minimum—minta hanya cakupan yang diperlukan agen Anda
  • Tetapkan daftar izin IP pada kunci API jika penyedia mendukungnya
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)}')

Menangani 401 Unauthorized pada Agen Anda

Ketika agen menerima respons 401 Unauthorized, agen tidak boleh langsung mencoba lagi tanpa pemeriksaan—hal itu membuang kuota batas laju. Sebagai gantinya, periksa apakah token telah kedaluwarsa (coba perbarui) atau apakah kuncinya tidak valid (segera beri peringatan agar manusia dapat memperbaikinya).

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()

Uji Singkat: Penyimpanan Kunci API

Uji pemahaman Anda tentang pengelolaan kredensial.

Ringkasan Autentikasi

Anda telah mempelajari dua pola autentikasi utama untuk agen:

  • Kunci API—dikirim dalam header Authorization: Bearer TOKEN atau X-API-Key; sederhana dan tanpa status
  • OAuth 2.0—alur kredensial klien untuk M2M; token memiliki masa berlaku dan harus diperbarui
  • Selalu simpan kunci dalam variabel lingkungan, jangan pernah di kode sumber
  • Gunakan python-dotenv secara lokal; gunakan variabel lingkungan atau pengelola rahasia dalam produksi
  • Tangani respons 401 dengan memeriksa apakah token telah kedaluwarsa atau kuncinya tidak valid

Penanganan autentikasi yang baik merupakan dasar setiap agen yang andal.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Autentikasi: Kunci API dan OAuth” gratis?

Ya — teks lengkap “Autentikasi: Kunci API dan OAuth” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Agents, upgrade ke CoddyKit PRO. Kursus AI Agents mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Autentikasi: Kunci API dan OAuth”?

Token bearer, header kunci API, dan alur OAuth2 untuk akses API agen. Kamu berlatih AI Agents dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai AI Agents?

Tidak diperlukan pengalaman sebelumnya. AI Agents di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Autentikasi: Kunci API dan OAuth” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Agents ini?

Ya. Setiap pelajaran AI Agents menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Dasar-Dasar REST API untuk Pengembang Agen
  2. Autentikasi: Kunci API dan OAuth
  3. Menangani Respons dan Error API
  4. Pembatasan Laju dan Logika Percobaan Ulang
← Kembali ke AI Agents