Moderna applikationer går allt mer bort från traditionella lösenord och mot lösenordslösa autentiseringsmetoder som är både säkrare och enklare för användarna. I det här inlägget kommer jag att visa hur man autentiserar användare i en AI-genererad ASP.NET Core-applikation med FoxIDs med OpenID Connect och möjliggör en heltäckande upplevelse av en-inloggning via e-post.
Vi utgår från en ren FoxIDs miljö, skapar en ny ASP.NET Core-webbapp, ansluter den till OpenID Connect och aktiverar slutligen passwordless-inloggning med e-postbaserad OTP.
Skapa en FoxIDs Dev Environment
Jag började med att skapa en ny tom dev-miljö i FoxIDs. En ren miljö gör det enkelt att ställa in autentisering från början och säkerställer att du kan replikera dessa steg i din egen tenant.
Om du inte har använt FoxIDs tidigare kan du skapa en gratis tenant på:
Varje tenant kommer med två färdiga att använda miljöer så att du kan experimentera fritt.
Konfigurera autentisering
Börja med configuring hur användare ska logga in. I det här fallet vill vi att användare ska logga in utan lösenord, med endast sin e-postadress och ett engångslösenord (OTP) som skickas till dem.
- Välj fliken Autentiseringar i din FoxIDs miljö.
- Klicka på Default — User Login UI.
- I avsnittet Autentisering inaktiverar du Lösenordsautentisering och aktiverar Lösenlös med e-post (engångslösenord).
- Klicka på Uppdatera för att spara ändringarna.
Detta gör det möjligt för användare att skapa ett nytt konto och ger en lösenordslös upplevelse där de autentiseras helt enkelt genom att ange sin e-postadress och OTP de får.
Generera ASP.NET Core-applikationen
Därefter behöver vi en applikation för att autentisera. Du kan använda antingen AI-prompten för att generera en ny ASP.NET Core Razor Pages-applikation inriktad på .NET 10 eller lägga till OpenID Connect till en befintlig applikation.
Läs inlägget "Lösenordslös autentisering i ASP.NET Core med FoxIDs och e-postbaserad OTP" om du vill skapa applikationen ASP.NET Core för hand.
För den här genomgången genererar jag en enkel ASP.NET Core-applikation i VS-kod med Codex. Du kan också använda Copilot.
Du är en expert ASP.NET Core-utvecklare.
Mål: Skapa (eller uppdatera) en ASP.NET Core-webbapp som autentiserar användare med FoxIDs med OpenID Connect (auktoriseringskodflöde), med hjälp av cookie-auth för den lokala sessionen och OIDC som utmaningsschema.
### Läge (välj ett)
- MODE = "NEW_APP" -> skapa en ny Razor Pages app
- MODE = "EXISTING_APP" -> ändra den nuvarande lösningen utan att bryta befintliga rutter/sidor
MODE: {{MODE}}
### Appdetaljer
- ProjectName: {{PROJECT_NAME}} (används endast om MODE = "NEW_APP")
- TargetFramework: net10.0 (eller behåll befintlig om nyare)
- Lokal HTTPS URL (måste matcha FoxIDs Redirect URI-basadress): {{APP_BASE_URL}} (exempel: https://localhost:7283/)
### FoxIDs OIDC konfiguration
Hårdkoda inte Authority, ClientId eller ClientSecret i koden eller i denna prompt.
I stället:
- Läs dem från konfigurationsnycklar:
- "IdentitySettings:Authority"
- "IdentitySettings:ClientId"
- "IdentitySettings:ClientSecret"
- Det slutliga svaret måste tydligt förklara för användaren var och hur man ställer in dessa konfigurationsvärden (till exempel i appsettings.json, miljövariabler eller användarhemligheter).
### Implementeringskrav
1) Lägg till autentisering i Program.cs:
- Konfigurera autentisering:
- DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme
- DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme
- Lägg till cookie-autentisering.
- Lägg till OpenID Connect autentisering:
- Authority från konfiguration: "IdentitySettings:Authority"
- ClientId från konfiguration: "IdentitySettings:ClientId"
- ClientSecret från konfiguration: "IdentitySettings:ClientSecret"
- ResponseType = "code"
- SaveTokens = true
- Scopes: "openid", "profile", "email", "offline_access"
- MapInboundClaims = false
- TokenValidationParameters:
- NameClaimType = "sub"
- RoleClaimType = "role"
- Lägg till OpenIdConnectEvents med:
- OnAuthenticationFailed: endast i Development, returnera ett enkelt rentextsvar med undantagsmeddelandet för felsökning. Exponera aldrig undantagsdetaljer eller PII i produktionen.
- Se till att mellanvaran är registrerad:
- app.UseAuthentication() anropas före app.UseAuthorization().
2) Lägg till konfigurationskablar:
- Lägg till en `IdentitySettings`-sektion i appsettings.json som endast innehåller icke-hemliga platshållarvärden, till exempel:
- "Authority": "https://your-foxids-authority/"
- "ClientId": "your-client-id"
- Läs "IdentitySettings:ClientSecret" från konfigurationen, men lagra dess värde i .NET användarhemligheter för lokal utveckling eller en miljövariabel eller säker hemlig butik i produktion.
- Om MODE = "EXISTING_APP", slå samman detta avsnitt med befintlig konfiguration utan att skriva över orelaterade inställningar.
- Lägg till kommentarer eller förklarande text i det slutliga svaret som:
- Dessa värden måste bytas ut av användaren med deras riktiga FoxIDs Authority, ClientId och ClientSecret.
- Hemligheter får inte skrivas till appsettings.json eller engageras för källkontroll.
3) Lägg till slutpunkter för inloggning/utloggning:
- Skapa `Controllers/AuthController.cs` med en standard MVC-kontroller:
- Använd ruttmönster `[controller]/[action]`.
- Inloggningsåtgärd (GET):
- Om användaren redan är autentiserad, omdirigera till "/".
- Annars, utfärda en Challenge med OpenIdConnectDefaults.AuthenticationScheme med RedirectUri = "/".
- Logga ut åtgärd (POST, med [ValidateAntiForgeryToken]):
- Om användaren inte är autentiserad, omdirigera till "/".
- Annars, SignOut från:
- CookieAuthenticationDefaults.AuthenticationScheme, och
- OpenIdConnectDefaults.AuthenticationScheme
med en RedirectUri = "/".
4) Lägg till partiell inloggning för användargränssnittet:
- Skapa `Pages/Shared/_LoginPartial.cshtml`.
- Beteende:
- Om användaren är autentiserad:
- Visa en "Logga ut"-knapp som skickar inlägg till `Auth/Logout` med en antiförfalskningstoken.
- Om användaren inte är autentiserad:
- Visa en "Logga in"-länk som pekar på `Auth/Login`.
5) Lägg till en del av layouten:
- Uppdatera `Pages/Shared/_Layout.cshtml` för att inkludera:
- `<partial name="_LoginPartial" />` i navigeringsfältsområdet, helst i linje med höger sida av navigeringsfältet.
- Ta inte bort befintligt layoutinnehåll.
6) Hemsidans beteende (för claimsvisning):
- Om MODE = "NEW_APP", eller om den befintliga hemsidan faktiskt är tom (endast standard eller inget meningsfullt innehåll):
- Implementera en enkel hemsida som:
- Välkomnar användaren.
- Om användaren är autentiserad, visar en lista eller tabell över användarclaimsen (typ och värde).
- Om användaren inte är autentiserad, visar ett meddelande som "Du är inte inloggad" och ett tips om att klicka på inloggningslänken.
- Om MODE = "EXISTING_APP" och hemsidan redan har meningsfullt innehåll:
- Ändra inte den befintliga hemsidan för att lägga till claimsvisning.
- Lämna det befintliga innehållet på hemsidan intakt.
### Output förväntningar
1) Kod- och filändringar:
- Lista alla filer som skapats eller ändrats.
- För varje fil, mata ut hela filinnehållet (eller en mycket tydlig skillnad om filen är stor).
- Se till att projektet kan byggas och köras med `dotnet run` (eller det vanliga kommandot för det valda målramverket).
2) Konfigurationsplacering och vägledning:
- Visa tydligt exakt var konfigurationsvärdena för Authority, ClientId och ClientSecret läses i koden (avsnittet IdentitySettings).
- Förklara för användaren:
- Att de måste ställa in dessa värden efter att koden genererats.
- Så här ställer du in Authority och ClientId i appsettings.json.
- Hur man ställer in ClientSecret i användarhemligheter lokalt eller en miljövariabel eller säker hemlig butik i produktion.
3) Information om applikationens slutpunkt:
- I ditt slutliga svar till användaren, ange uttryckligen:
- Den lokala slutpunkts-URL som programmet lyssnar på (till exempel: `{{APP_BASE_URL}}` eller URL:en som mallen använder).
- En kort, tydlig instruktion som berättar för användaren:
- "Konfigurera din FoxIDs Authority och ClientId i avsnittet IdentitySettings. Lagra ClientSecret i användarhemligheter lokalt eller i en miljövariabel eller säker hemlig butik i produktion, så att den kan läsas under körning."
4) Skyddsräcken:
- Inför inte orelaterad refaktorering.
- Ta inte bort några befintliga funktioner utöver vad som strikt krävs för att integrera OIDC med FoxIDs.
- Håll lösningen fokuserad på:
- Lägger till cookie + OIDC autentisering,
- AuthController,
- Delvis inloggning,
- Minimala ändringar på hemsidan enligt beskrivningen.
Implementera nu allt ovanstående.
AI-svaret bör instruera dig var du ska konfigurera Authority, klient-ID och klienthemlighet.
Försök nu att köra programmet för att hitta slutpunkten.
Min exempelapplikation körs lokalt på https://localhost:7154/
Du kan hitta den AI-genererade exempelkoden i: https://github.com/ITfoxtec/dotnet.samples/tree/main/WebAppPasswordLessEmailAI
Konfigurera webbapplikationen i FoxIDs
Nu när vi känner till webbapplikationens lokala adress kan vi registrera den i FoxIDs så att den kan autentisera användare genom OpenID Connect.
- Välj fliken Program i din FoxIDs miljö.
- Välj Ny applikation och välj sedan Webbapplikation — OpenID Connect.
- I Namn anger du ett namn, till exempel: ASP.NET webbapplikation.
- I Redirect URI lägger du till programmets basadress: https://localhost:7154/ Som standard tillåter FoxIDs omdirigering till valfri efterföljande sida under denna bas-URL. Om du föredrar striktare validering kan du kräva absoluta omdirigerings-URI:er.
- Klicka på Skapa.
FoxIDs visar nu anslutningsdetaljerna för din nya applikation, inklusive:
- Authority
- Kund-ID
- Kundhemlighet
Kopiera Authority och klient-ID till projektets IdentitySettings-sektion. Lagra Client Secret i .NET användarhemligheter lokalt eller i en säker miljövariabel eller hemlig butik i produktion.
Konfigurera autentisering i ASP.NET applikationen
Med FoxIDs applikationen skapad är nästa steg att konfigurera autentisering i ASP.NET Core-projektet.
Lägg till den icke-hemliga FoxIDs anslutningsinformationen till appsettings.json:
{
"IdentitySettings": {
"Authority": "https://foxids.com/{tenant}/{environment}/{application}/",
"ClientId": "your-client-id"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}
Lagra klienthemligheten lokalt utan att lägga till den i appsettings.json:
dotnet user-secrets init
dotnet user-secrets set "IdentitySettings:ClientSecret" "your-client-secret"
Byt ut exempelvärdena med de från din egen FoxIDs miljö och begå aldrig den verkliga klienthemligheten.
Logga in
Klicka på Logga in och du omdirigeras till FoxIDs inloggningsskärmen.
Välj Skapa användare.
Fyll i formuläret Skapa användare med din e-post (eller ett testmeddelande som du har tillgång till), förnamn och efternamn och klicka sedan på Skapa.
Ange engångslösenordet (OTP) som du fick via e-post och klicka sedan på Logga in.
Du är inloggad och din testanvändares claims visas.
Försök sedan att logga ut och logga in igen för att uppleva det lösenordslösa inloggningsflödet med e-post OTP.