Gå til innhold

Autentisering⚓︎

Oversikt⚓︎

Kai bruker JWT Bearer-autentisering med støtte for to token-utstedere:

  1. Azure Bot Service (ABS) — Tokens fra Teams-kanalen via Bot Framework
  2. Azure Entra ID — Tokens fra direkte API-klienter
graph LR
    Teams[Microsoft Teams] -->|ABS token| Host[Kai Host]
    API[API-klient] -->|Entra ID token| Host
    Host --> Validate{Issuer?}
    Validate -->|api.botframework.com| ABS[ABS OpenID metadata]
    Validate -->|login.microsoftonline.com| Entra[Entra ID OpenID metadata]

Token-validering⚓︎

AddAgentAspNetAuthentication() i AspNetExtensions.cs konfigurerer JWT-validering:

Parameter Verdi
ValidateIssuer true
ValidateAudience true
ValidateLifetime true
ClockSkew 5 minutter
RequireSignedTokens true

Issuer-deteksjon⚓︎

I OnMessageReceived-eventet inspiseres JWT-tokenet for å finne iss-claimet:

  • Hvis issuer er https://api.botframework.com → bruk ABS OpenID metadata-endepunkt
  • Ellers → bruk Entra ID OpenID metadata-endepunkt

Metadata-konfigurasjoner caches i en ConcurrentDictionary for ytelse.

Autorisasjon⚓︎

AllowedCallers-policyen kontrollerer hvilke applikasjoner som kan kalle Kai:

  • ["*"] → Alle tillatt (standard)
  • Liste med App ID-er → Kun disse tillatt
  • ABS-tokens tillates alltid (Bot Framework-trafikk)

For Entra ID-tokens sjekkes azp (authorized party) eller appid-claimet mot listen.

Konfigurasjon⚓︎

appsettings.json
1
2
3
4
5
6
7
{
  "TokenValidation": {
    "Audiences": ["<agent-app-id>"],
    "TenantId": "<tenant-id>",
    "AllowedCallers": ["*"]
  }
}

X-Forwarded-Prefix

Kai kjører bak Azure API Management (APIM). Middleware i Program.cs håndterer X-Forwarded-Prefix-headeren for korrekt path-basert ruting.