Lärarguide · Lektion 7 av 8

Web API-anrop & auth

Mål: studenten kan hämta data från ett HTTP-API och skydda sidor med inbyggd Blazor-auth.

V7
Vecka
2,5 h
Total tid
~50 min
Teori
~70 min
Workshop
Studentmaterial 07-api-auth.html
Kompletterande resurser

Lektionens mål

Agenda (150 min)

0:00
Check-in.
0:10
Teori: HttpClient i Blazor — AddHttpClient, typed client, GetFromJsonAsync.
0:35
Teori: Felhantering — try/catch, ErrorBoundary, CancellationToken.
0:50
Teori: Auth-översikt — Identity, AuthorizeView, [Authorize].
1:05
Paus 15 min
1:20
Workshop: Open-Meteo-väderapp + skyddad sida.
2:20
Examinations-status. Vem behöver hjälp innan deadline?
2:30
Slut

Talartips per sektion

Typad klient vs anonym: visa båda. Typad är att föredra: dependency-injection-vänlig, testbar, BaseAddress hanteras på ett ställe.
Auth är ett djupt ämne: säg att vi bara gör översikten. Identity har 20+ Razor Pages som genereras — vi går inte in i dem. För djupet finns Pluralsight Securing Blazor.
UI ≠ säkerhet: det här är kursens andra viktiga säkerhetspoäng. AuthorizeView gömmer knappar, men servern måste fortfarande skydda endpoints med [Authorize].

Workshop — guide för läraren

  1. Registrera en typad WeatherClient mot https://api.open-meteo.com.
  2. Bygg en sida som låter användaren ange koordinater och visar temperaturen.
  3. Hantera fel snyggt (visa felmeddelande, inte ett crash).
  4. Skapa ett nytt sidoprojekt med --auth Individual. Demonstrera AuthorizeView och [Authorize].
  5. Skapa ett admin-konto manuellt (via Identity-sidorna) och en skyddad /admin-sida.
// Program.cs
builder.Services.AddHttpClient<WeatherClient>(c =>
  c.BaseAddress = new Uri("https://api.open-meteo.com/"));

// WeatherClient.cs
public class WeatherClient(HttpClient http)
{
  public async Task<double?> GetTempAsync(double lat, double lon)
  {
    var resp = await http.GetFromJsonAsync<OpenMeteoResponse>(
      $"v1/forecast?latitude={lat}&longitude={lon}&current=temperature_2m");
    return resp?.Current?.Temperature_2m;
  }
}

För snabba

  • Lägg till ErrorBoundary med en reset-knapp.
  • Bygg ett eget Minimal API (separat projekt) som tjänar produkter och konsumera från Blazor.

För dem som behöver stöd

  • Förbered en färdig WeatherClient-skelett — låt dem fylla i metoden.
  • CORS är vanlig fallgrop när man bygger eget API — använd Open-Meteo som inte har CORS-problem.

Vanliga frågor

CORS-fel — hur löser jag det?
På API-sidan: app.UseCors(p => p.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()) under utveckling. I produktion: lista bara godkända origins.
Skickas cookies med HttpClient i WASM?
Standard ja för same-origin. För cross-origin behöver du sätta BrowserRequestCredentials.Include.
Hur lägger jag till en roll-claim?
I Identity: via UserManager.AddToRoleAsync. Du behöver också ha roller registrerade — använd AddIdentity istället för AddDefaultIdentity eller seed roller via RoleManager.
Min fetch får tillbaka HTML i stället för 401 när användaren är utloggad!
Det är det klassiska problemet med cookie-auth som gör 302-redirect till login. Fixat i .NET 10: endpoints markerade som API returnerar nu 401/403 i stället för redirect. Om du fortfarande sätter upp dig på äldre kod — implementera OnRedirectToLogin i CookieAuthenticationEvents.
Talartips: passkeys Om någon student frågar om lösenordsfri inloggning — .NET 10 har inbyggt stöd för passkeys (WebAuthn) i Identity. Blazor Web App-mallen med Individual Accounts innehåller scaffolding för det. Bortom kursens scope men en bra tråd för vidare studier.
Säkerhetspoäng Studenter försöker ofta "skydda" en API-endpoint genom att gömma knappen i Blazor. Säg det rakt ut: UI-skydd är inte säkerhet. Endpoints måste skyddas med [Authorize].
Hemuppgift Slutför funktionella krav i examinationen. Lägg till auth om du siktar på VG.
Förberedelse till nästa lektion L8 är sista lektionen och innehåller redovisning. Boka in 10-min-slots för redovisning i förväg. Förbered Azure-konton (testverions) ifall någon vill deploya live på lektionen.

← L6 L8 — Render & Deploy →