AI-agenter · leksjon

Autentisering: API-nøkler og OAuth

Bearer-token, headere med API-nøkler og OAuth2-flyter for agenttilgang til API-er.

Leksjon 2 av 413 trinn

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)  # 200

API-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- eller X-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.

Gratis å komme i gang

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

  1. Grunnleggende REST API for agentutviklere
  2. Autentisering: API-nøkler og OAuth
  3. Håndtere API-svar og feil
  4. Frekvensbegrensning og logikk for nye forsøk
← Tilbake til AI-agenter