AI-agenter · Lektion

Autentisering: API-nycklar och OAuth

Bearer-tokenar, headers med API-nycklar och OAuth2-flöden för agenters API-åtkomst.

Lektion 2 av 413 steg

Autentisering: API-nycklar och OAuth är en gratis lektion i AI-agenter på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för AI-agenter, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i AI-agenter innehåller totalt 4 lektioner.

Varför autentisering är viktigt för agenter

När agenten anropar ett externt API behöver servern veta vem som skickar förfrågan. Autentisering bevisar identiteten; auktorisering avgör vad ni får göra. Utan korrekt autentisering returnerar varje förfrågan 401 Unauthorized och agenten kan inte göra någonting.

Två mönster dominerar vid agentutveckling: API-nycklar och 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-nyckel i Authorization-headern

Det vanligaste mönstret är att skicka API-nyckeln i Authorization-headern som en Bearer-token. Ordet "Bearer" signalerar att den som har denna token är auktoriserad — servern litar på den som innehar nyckeln.

Detta används av OpenAI, Anthropic, GitHub och de flesta moderna 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-nyckel i en anpassad header (X-API-Key)

Vissa API:er — särskilt äldre eller interna — använder en anpassad header som X-API-Key i stället för Authorization: Bearer. Mönstret är detsamma, men headernamnet är annorlunda. Kontrollera alltid API-dokumentationen för det exakta headernamn som förväntas.

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

Lagra autentiseringsuppgifter i miljövariabler

Hårdkoda aldrig API-nycklar i källkoden. Om ni lägger in en nyckel i ett publikt repo hittar och missbrukar botar den inom några sekunder. Det korrekta mönstret är att lagra autentiseringsuppgifter i miljövariabler och läsa dem vid körning med os.environ.

Använd os.environ.get() tillsammans med ett tydligt felmeddelande om nyckeln saknas.

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

Använda python-dotenv vid lokal utveckling

Under utvecklingen ska ni förvara nycklarna i en .env-fil i projektets rotkatalog. Använd biblioteket python-dotenv för att läsa in dem automatiskt. Lägg till .env i .gitignore så att filen aldrig blir committad.

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

Vad är OAuth 2.0?

OAuth 2.0 är en standard för delegerad auktorisering. I stället för att ge agenten användarens lösenord låter OAuth användaren auktorisera agenten att agera i användarens ställe, med begränsade behörigheter och en begränsad giltighetstid. Det används av Google, GitHub, Slack och Salesforce.

Det centrala konceptet är att agenten får en åtkomsttoken efter ett auktoriseringsflöde och sedan använder tokenen för API-anrop.

# 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-flödet med klientuppgifter

Flödet med klientuppgifter är det enklaste OAuth-flödet för agenter – ingen användarinteraktion behövs. Agenten autentiserar sig med sitt eget klient-ID och sin klienthemlighet för att hämta en token. Detta används för maskin-till-maskin-kommunikation (M2M).

Ni skickar era autentiseringsuppgifter med POST till token-endpointen och tar emot en kortlivad åtkomsttoken.

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

Använda OAuth-token i API-anrop

När ni har en OAuth-åtkomsttoken använder ni den precis som en API-nyckel – i Authorization: Bearer-huvudet. Skillnaden är att OAuth-token går ut, så agenten måste hantera tokenförnyelse innan den gör anrop.

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

För Google-API:er hanterar biblioteket google-auth all OAuth-komplexitet åt er. Det hanterar tokenförnyelse automatiskt, läser autentiseringsuppgifter från en JSON-fil och bifogar token till begäranden 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())

Bästa praxis för att skydda API-nycklar

Att skydda API-nycklar är avgörande för agentens säkerhet. Följ dessa regler:

  • Förvara nycklar i miljövariabler eller en secrets manager (AWS Secrets Manager, HashiCorp Vault)
  • Logga aldrig nycklar – maskera dem i utdata
  • Rotera nycklar regelbundet och återkalla komprometterade nycklar omedelbart
  • Använd principen om minsta behörighet – begär endast de scopes som agenten behöver
  • Ange tillåtna IP-adresser för API-nycklar när leverantören stöder 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)}')

Hantera 401 Unauthorized i agenten

När en agent får svaret 401 Unauthorized ska den aldrig försöka igen utan eftertanke – det slösar på kvoten för hastighetsbegränsningen. Kontrollera i stället om token har gått ut (försök förnya den) eller om själva nyckeln är ogiltig (larma omedelbart så att en människa kan åtgärda problemet).

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

Snabbtest: lagring av API-nycklar

Testa er förståelse av hantering av autentiseringsuppgifter.

Sammanfattning av autentisering

Ni har lärt er de två viktigaste autentiseringsmönstren för agenter:

  • API-nycklar – skickas i huvudet Authorization: Bearer TOKEN eller X-API-Key; enkelt och tillståndslöst
  • OAuth 2.0 – flödet med klientuppgifter för M2M; token går ut och måste förnyas
  • Förvara alltid nycklar i miljövariabler, aldrig i källkoden
  • Använd python-dotenv lokalt och miljövariabler eller secrets managers i produktion
  • Hantera 401-svar genom att kontrollera om token har gått ut eller om nyckeln är ogiltig

Stabil autentiseringshantering är grunden för varje tillförlitlig agent.

Gratis att börja

Lär dig AI-agenter med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
60
Lektioner
239

Vanliga frågor

Är lektionen ”Autentisering: API-nycklar och OAuth” gratis?

Ja – hela texten till ”Autentisering: API-nycklar och OAuth” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i AI-agenter, kan Ni uppgradera till CoddyKit PRO. Kursen i AI-agenter innehåller totalt 4 lektioner.

Vad lär jag mig i ”Autentisering: API-nycklar och OAuth”?

Bearer-tokenar, headers med API-nycklar och OAuth2-flöden för agenters API-åtkomst. Ni övar på AI-agenter med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig AI-agenter?

Du behöver inga förkunskaper. Utbildningen i AI-agenter på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”Autentisering: API-nycklar och OAuth”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här AI-agenter-lektionen?

Ja. Varje AI-agenter-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. REST API-grunder för agentutvecklare
  2. Autentisering: API-nycklar och OAuth
  3. Hantera API-svar och fel
  4. Hastighetsbegränsning och retry-logik
← Tillbaka till AI-agenter