Autentisering: API-nøkler og OAuth
Bearer-token, headere med API-nøkler og OAuth2-flyter for agenttilgang til API-er.
Autentisering: API-nøkler og OAuth er en gratis leksjon i AI-agenter på CoddyKit. Dette er leksjon 2 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i AI-agenter, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i AI-agenter inneholder totalt 4 leksjoner.
Hvorfor autentisering er viktig for agenter
Når agenten din kaller et eksternt API, må serveren vite hvem som sender forespørselen. Autentisering bekrefter identiteten; autorisering avgjør hva du kan gjøre. Uten riktig autentisering returnerer hver forespørsel 401 Unauthorized, og agenten din kan ikke gjøre noe.
To mønstre dominerer agentutvikling: API-nøkler og 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) # 200API-nøkkel i Authorization-headeren
Det vanligste mønsteret er å sende API-nøkkelen i Authorization-headeren som et Bearer-token. Ordet «Bearer» signaliserer at den som har dette tokenet, er autorisert – serveren stoler på den som bærer nøkkelen.
Dette brukes av OpenAI, Anthropic, GitHub og de fleste moderne API-er.
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-nøkkel i en egendefinert header (X-API-Key)
Noen API-er – særlig eldre eller interne API-er – bruker en egendefinert header som X-API-Key i stedet for Authorization: Bearer. Mønsteret er det samme, men headernavnet er annerledes. Sjekk alltid API-dokumentasjonen for det nøyaktige headernavnet som forventes.
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')Lagre legitimasjon i miljøvariabler
Legg aldri API-nøkler direkte inn i kildekoden. Hvis du committer en nøkkel til et offentlig repo, vil roboter finne og misbruke den i løpet av sekunder. Det riktige mønsteret er å lagre påloggingsopplysninger i miljøvariabler og lese dem ved kjøring med os.environ.
Bruk os.environ.get() sammen med en tydelig feilmelding hvis nøkkelen mangler.
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)')Bruke python-dotenv i lokal utvikling
Under utvikling bør du oppbevare nøklene i en .env-fil i prosjektets rotmappe. Bruk biblioteket python-dotenv til å laste dem inn automatisk. Legg .env til i .gitignore, slik at filen aldri blir committet.
# .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')Hva er OAuth 2.0?
OAuth 2.0 er en standard for delegert autorisering. I stedet for å gi agenten din brukerens passord, lar OAuth brukeren autorisere agenten din til å handle på brukerens vegne, med et begrenset omfang og tidsrom. Det brukes av Google, GitHub, Slack og Salesforce.
Det viktigste konseptet er at agenten din får et access token etter en autoriseringsflyt, og deretter bruker dette tokenet til API-kall.
# 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-flyt for klientlegitimasjon
Klientlegitimasjonsflyten er den enkleste OAuth-flyten for agenter – ingen brukerinteraksjon er nødvendig. Agenten autentiserer seg med sin egen klient-ID og klienthemmelighet for å hente et token. Dette brukes til kommunikasjon mellom maskiner (M2M).
Du sender legitimasjonen din med POST til token-endepunktet og mottar et kortlivet tilgangstoken.
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')Bruke OAuth-tokener i API-kall
Når du har et OAuth-tilgangstoken, bruker du det akkurat som en API-nøkkel – i Authorization: Bearer-hodet. Forskjellen er at OAuth-tokener utløper, så agenten må håndtere fornying av tokenet før den foretar kall.
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 med google-auth-biblioteket
For Google-API-er håndterer google-auth-biblioteket all OAuth-kompleksiteten for deg. Det administrerer automatisk fornying av token, leser legitimasjon fra en JSON-fil og legger token til forespørsler via en 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())Beste praksis for API-nøkler
Det er avgjørende å beskytte API-nøkler for agentens sikkerhet. Følg disse reglene:
- Lagres nøkler i miljøvariabler eller en secrets manager (AWS Secrets Manager, HashiCorp Vault)
- Logg aldri nøkler – masker dem i utdata
- Roter nøkler regelmessig, og tilbakekall kompromitterte nøkler umiddelbart
- Bruk prinsippet om minste privilegium – be bare om de scopene agenten trenger
- Angi tillatte IP-adresser for API-nøkler når leverandøren støtter det
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)}')Håndtering av 401 Unauthorized i agenten
Når en agent får et 401 Unauthorized-svar, skal den aldri prøve på nytt blindt – det sløser med kvoten for hastighetsbegrensningen. Sjekk i stedet om tokenet har utløpt (prøv å fornye det), eller om selve nøkkelen er ugyldig (varsle umiddelbart, slik at en person kan rette det).
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()Kort test: lagring av API-nøkler
Test forståelsen din av håndtering av legitimasjon.
Oppsummering av autentisering
Du har lært de to viktigste autentiseringsmønstrene for agenter:
- API-nøkler – sendes i
Authorization: Bearer TOKEN- ellerX-API-Key-hodet; enkelt og tilstandsløst - OAuth 2.0 – klientlegitimasjonsflyt for M2M; tokener utløper og må fornyes
- Lagre alltid nøkler i miljøvariabler, aldri i kildekoden
- Bruk python-dotenv lokalt; miljøvariabler eller secrets managere i produksjon
- Håndter 401-svar ved å sjekke om tokenet er utløpt eller om nøkkelen er ugyldig
Solid håndtering av autentisering er grunnlaget for enhver pålitelig agent.
Lær deg AI-agenter med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 60
- Leksjoner
- 239
Ofte stilte spørsmål
Er leksjonen «Autentisering: API-nøkler og OAuth» gratis?
Ja – hele teksten i «Autentisering: API-nøkler og OAuth» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av AI-agenter-kurset, kan du oppgradere til CoddyKit PRO. Kurset i AI-agenter inneholder totalt 4 leksjoner.
Hva lærer jeg i «Autentisering: API-nøkler og OAuth»?
Bearer-token, headere med API-nøkler og OAuth2-flyter for agenttilgang til API-er. Du øver på AI-agenter med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med AI-agenter?
Ingen tidligere erfaring er nødvendig. AI-agenter på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.
Hvor lang tid tar leksjonen «Autentisering: API-nøkler og OAuth»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne AI-agenter-leksjonen?
Ja. Alle AI-agenter-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Grunnleggende REST API for agentutviklere
- Autentisering: API-nøkler og OAuth
- Håndtere API-svar og feil
- Frekvensbegrensning og logikk for nye forsøk