Moderne applikasjoner beveger seg i økende grad bort fra tradisjonelle passord og mot passordløse autentiseringsmetoder som er både sikrere og enklere for brukerne. I dette innlegget skal jeg vise hvordan du autentiserer brukere i en AI-generert ASP.NET Core-applikasjon ved å bruke FoxIDs med OpenID Connect og aktiverer en opplevelse med fullstendig engangspålogging via e-post.
Vi starter fra et rent FoxIDs miljø, oppretter en ny ASP.NET Core nettapp, kobler den til OpenID Connect og aktiverer til slutt passwordless-pålogging med e-postbasert OTP.
Opprette et FoxIDs Dev-miljø
Jeg begynte med å lage et nytt tomt dev-miljø i FoxIDs. Et rent miljø gjør det enkelt å sette opp autentisering fra bunnen av og sikrer at du kan replikere disse trinnene i din egen tenant.
Hvis du ikke har brukt FoxIDs før, kan du opprette en gratis tenant på:
Hver tenant kommer med to klare til bruk miljøer slik at du kan eksperimentere fritt.
Konfigurer autentisering
Begynn med configuring hvordan brukere skal logge på. I dette tilfellet vil vi at brukere skal logge på uten passord, kun bruke e-postadressen og et engangspassord (OTP) sendt til dem.
- Velg kategorien Autentiseringer i ditt FoxIDs miljø.
- Klikk på Standard — User Login UI.
- I delen Autentisering, deaktiver Passordautentisering og aktiver Passordløs med e-post (engangspassord).
- Klikk Oppdater for å lagre endringene.
Dette gjør det mulig for brukere å opprette en ny konto og gir en passordløs opplevelse der de autentiserer ganske enkelt ved å skrive inn e-postadressen og OTP de mottar.
Generer ASP.NET Core-applikasjonen
Deretter trenger vi en applikasjon for å autentisere. Du kan enten bruke AI-ledeteksten til å generere en ny ASP.NET Core Razor Pages-applikasjon rettet mot .NET 10 eller legge til OpenID Connect til en eksisterende applikasjon.
Les "Passordløs autentisering i ASP.NET Core med FoxIDs og e-postbasert OTP"-innlegget hvis du vil lage ASP.NET Core-applikasjonen for hånd.
For denne gjennomgangen genererer jeg en enkel ASP.NET Core-applikasjon i VS-kode med Codex. Du kan også bruke Copilot.
Du er en ekspert ASP.NET Core-utvikler.
Mål: Lag (eller oppdater) en ASP.NET Core nettapp som autentiserer brukere med FoxIDs ved å bruke OpenID Connect (autorisasjonskodeflyt), ved å bruke informasjonskapselautentisering for den lokale økten og OIDC som utfordringsskjema.
### Modus (velg en)
- MODE = "NEW_APP" -> opprett en ny Razor Pages-app
- MODE = "EXISTING_APP" -> endre gjeldende løsning uten å bryte eksisterende ruter/sider
MODE: {{MODE}}
### Appdetaljer
- ProjectName: {{PROJECT_NAME}} (brukes bare hvis MODE = "NEW_APP")
- TargetFramework: net10.0 (eller behold eksisterende hvis nyere)
- Lokal HTTPS URL (må samsvare med FoxIDs Redirect URI-basisadresse): {{APP_BASE_URL}} (eksempel: https://localhost:7283/)
### FoxIDs OIDC konfigurasjon
Ikke hardkode Authority, ClientId eller ClientSecret i koden eller i denne ledeteksten.
I stedet:
- Les dem fra konfigurasjonsnøkler:
- "IdentitySettings:Authority"
- "IdentitySettings:ClientId"
- "IdentitySettings:ClientSecret"
- Det endelige svaret må tydelig forklare brukeren hvor og hvordan disse konfigurasjonsverdiene skal settes (for eksempel i appsettings.json, miljøvariabler eller brukerhemmeligheter).
### Gjennomføringskrav
1) Legg til autentisering i Program.cs:
- Konfigurer autentisering:
- DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme
- DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme
- Legg til autentisering av informasjonskapsler.
- Legg til OpenID Connect autentisering:
- Authority fra konfig: "IdentitySettings:Authority"
- ClientId fra konfig: "IdentitySettings:ClientId"
- ClientSecret fra konfig: "IdentitySettings:ClientSecret"
- ResponseType = "code"
- SaveTokens = true
- Scopes: "openid", "profile", "email", "offline_access"
- MapInboundClaims = false
- TokenValidationParameters:
- NameClaimType = "sub"
- RoleClaimType = "role"
- Legg til OpenIdConnectEvents med:
- OnAuthenticationFailed: bare i Development, returner et enkelt rentekstsvar med unntaksmeldingen for feilsøking. Utsett aldri unntaksdetaljer eller PII i produksjon.
- Sørg for at mellomvaren er registrert:
- app.UseAuthentication() kalles før app.UseAuthorization().
2) Legg til konfigurasjonsledninger:
- Legg til en `IdentitySettings`-seksjon i appsettings.json som bare inneholder ikke-hemmelige plassholderverdier, for eksempel:
- "Authority": "https://your-foxids-authority/"
- "ClientId": "your-client-id"
- Les "IdentitySettings:ClientSecret" fra konfigurasjonen, men lagre verdien i .NET brukerhemmeligheter for lokal utvikling eller en miljøvariabel eller sikker hemmelig lagring i produksjon.
- Hvis MODE = "EXISTING_APP", slå sammen denne delen inn i eksisterende konfigurasjon uten å overskrive urelaterte innstillinger.
- Legg til kommentarer eller forklarende tekst i det endelige svaret som:
- Disse verdiene må erstattes av brukeren med deres virkelige FoxIDs Authority, ClientId og ClientSecret.
- Hemmeligheter må ikke skrives til appsettings.json eller forpliktes til kildekontroll.
3) Legg til endepunkter for pålogging/utlogging:
- Lag `Controllers/AuthController.cs` med en standard MVC-kontroller:
- Bruk rutemønster `[controller]/[action]`.
- Påloggingshandling (GET):
- Hvis brukeren allerede er autentisert, omdiriger til "/".
- Ellers utsted en Challenge med OpenIdConnectDefaults.AuthenticationScheme med RedirectUri = "/".
- Logg ut handling (POST, med [ValidateAntiForgeryToken]):
- Hvis brukeren ikke er autentisert, omdiriger til "/".
- Ellers, SignOut fra:
- CookieAuthenticationDefaults.AuthenticationScheme, og
- OpenIdConnectDefaults.AuthenticationScheme
med en RedirectUri = "/".
4) Legg til delvis pålogging for brukergrensesnitt:
- Opprett `Pages/Shared/_LoginPartial.cshtml`.
- Oppførsel:
- Hvis brukeren er autentisert:
- Vis en "Logg av"-knapp som sender til `Auth/Logout` med et antiforfalskningstoken.
- Hvis brukeren ikke er autentisert:
- Vis en "Logg inn"-lenke som peker til `Auth/Login`.
5) Legg til en del av layouten:
- Oppdater `Pages/Shared/_Layout.cshtml` for å inkludere:
- `<partial name="_LoginPartial" />` i navigasjonslinjeområdet, fortrinnsvis justert til høyre side av navigasjonslinjen.
- Ikke fjern eksisterende layoutinnhold.
6) Hjemmesideatferd (for visning av claims):
- Hvis MODE = "NEW_APP", eller hvis den eksisterende hjemmesiden faktisk er tom (bare standard eller ikke noe meningsfullt innhold):
- Implementer en enkel hjemmeside som:
- Ønsker brukeren velkommen.
- Hvis brukeren er autentisert, viser en liste eller tabell over brukerclaimsene (type og verdi).
- Hvis brukeren ikke er autentisert, viser en melding som "Du er ikke logget på" og et hint om å klikke på påloggingslenken.
- Hvis MODE = "EXISTING_APP" og hjemmesiden allerede har meningsfullt innhold:
- Ikke modifiser den eksisterende hjemmesiden for å legge til claimsvisning.
- La det eksisterende innholdet på hjemmesiden være intakt.
### Output forventninger
1) Kode- og filendringer:
- Liste over alle filer som er opprettet eller endret.
- For hver fil, skriv ut hele filinnholdet (eller en veldig klar forskjell hvis filen er stor).
- Sørg for at prosjektet kan bygges og kjøres med `dotnet run` (eller den vanlige kommandoen for det valgte målrammeverket).
2) Konfigurasjonsplassering og veiledning:
- Vis tydelig nøyaktig hvor konfigurasjonsverdiene for Authority, ClientId og ClientSecret leses i koden (delen IdentitySettings).
- Forklar brukeren:
- At de må sette disse verdiene etter at koden er generert.
- Hvordan stille inn Authority og ClientId i appsettings.json.
- Hvordan sette ClientSecret i brukerhemmeligheter lokalt eller en miljøvariabel eller sikker hemmelig butikk i produksjon.
3) Applikasjonsendepunktinformasjon:
- I ditt siste svar til brukeren, oppgi eksplisitt:
- Den lokale endepunkt-URLen som applikasjonen lytter på (for eksempel: `{{APP_BASE_URL}}` eller URL-en som malen bruker).
- En kort, tydelig instruksjon som forteller brukeren:
- "Konfigurer FoxIDs Authority og ClientId i IdentitySettings-delen. Lagre ClientSecret i brukerhemmeligheter lokalt eller i en miljøvariabel eller sikker hemmelig butikk i produksjon, slik at den kan leses under kjøretid."
4) Rekkverk:
- Ikke introduser urelatert refactoring.
- Ikke fjern noen eksisterende funksjoner utover det som er strengt nødvendig for å integrere OIDC med FoxIDs.
- Hold løsningen fokusert på:
- Legger til informasjonskapsel + OIDC autentisering,
- AuthController,
- Delvis pålogging,
- Minimale endringer på hjemmesiden som beskrevet.
Implementer nå alt det ovennevnte.
AI-svaret skal instruere deg hvor du skal konfigurere Authority, klient-ID og klienthemmelighet.
Prøv nå å kjøre programmet for å finne endepunktet.
Eksempelapplikasjonen min kjører lokalt på https://localhost:7154/
Du kan finne den AI-genererte prøvekoden i: https://github.com/ITfoxtec/dotnet.samples/tree/main/WebAppPasswordLessEmailAI
Konfigurer webapplikasjonen i FoxIDs
Nå som vi kjenner nettapplikasjonens lokale adresse, kan vi registrere den i FoxIDs slik at den kan autentisere brukere gjennom OpenID Connect.
- Velg kategorien Applikasjoner i ditt FoxIDs miljø.
- Velg Ny applikasjon, og velg deretter Webapplikasjon — OpenID Connect.
- I Navn skriver du inn et navn, for eksempel: ASP.NET nettapplikasjon.
- I Redirect URI legger du til applikasjonens basisadresse: https://localhost:7154/ Som standard tillater FoxIDs omdirigering til enhver påfølgende side under denne basis-URLen. Hvis du foretrekker strengere validering, kan du kreve absolutte omdirigerings-URIer.
- Klikk på Opprett.
FoxIDs viser nå tilkoblingsdetaljene for din nye applikasjon, inkludert:
- Authority
- Kunde-ID
- Kundehemmelighet
Kopier Authority og Client ID inn i prosjektets IdentitySettings-seksjon. Lagre Client Secret i .NET brukerhemmeligheter lokalt eller i en sikker miljøvariabel eller hemmelig butikk i produksjon.
Konfigurer autentisering i ASP.NET applikasjonen
Med FoxIDs applikasjonen opprettet, er neste trinn å konfigurere autentisering i ASP.NET Core-prosjektet.
Legg til de ikke-hemmelige FoxIDs tilkoblingsdetaljene til appsettings.json:
{
"IdentitySettings": {
"Authority": "https://foxids.com/{tenant}/{environment}/{application}/",
"ClientId": "your-client-id"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}
Lagre klienthemmeligheten lokalt uten å legge den til appsettings.json:
dotnet user-secrets init
dotnet user-secrets set "IdentitySettings:ClientSecret" "your-client-secret"
Erstatt eksempelverdiene med de fra ditt eget FoxIDs miljø, og begå aldri den virkelige klienthemmeligheten.
Logg inn
Klikk på Logg inn og du blir omdirigert til FoxIDs påloggingsskjermen.
Velg Opprett bruker.
Fyll ut Opprett bruker-skjemaet med e-posten din (eller en test-e-post du har tilgang til), fornavn og etternavn, og klikk deretter på Opprett.
Skriv inn engangspassordet (OTP) du mottok på e-post, og klikk deretter på Logg inn.
Du er logget på og testbrukerens claims vises.
Prøv deretter å logge av og logge på igjen for å oppleve den passordløse påloggingsflyten ved å bruke e-post OTP.