Konfigurera autentisering i en Python-exempelwebbapp med hjälp av Azure AD B2C
Den här artikeln använder ett Python-exempelwebbprogram för att illustrera hur du lägger till Azure Active Directory B2C-autentisering (Azure AD B2C) i dina webbprogram.
Översikt
OpenID Connect (OIDC) är ett autentiseringsprotokoll som bygger på OAuth 2.0. Du kan använda OIDC för att logga in användare på ett säkert sätt i ett program. Det här webbappexemplet använder identitetspaketet för Python för att förenkla tillägg av stöd för autentisering och auktorisering i Python-webbappar.
Inloggningsflödet omfattar följande steg:
- Användare går till webbappen och väljer Logga in.
- Appen initierar en autentiseringsbegäran och omdirigerar användare till Azure AD B2C.
- Användare registrerar sig eller loggar in, återställer lösenordet eller loggar in med ett socialt konto.
- När användarna har loggat in returnerar Azure AD B2C en ID-token till appen.
- Appen utbyter auktoriseringskoden med en ID-token, validerar ID-token, läser anspråken och returnerar sedan en säker sida till användarna.
Förutsättningar
- Ett Azure-konto med en aktiv prenumeration. Skapa ett konto utan kostnad.
- Om du inte redan har en skapar du en Azure AD B2C-klientorganisation som är länkad till din Azure-prenumeration.
- Python 3.8+
Steg 1: Konfigurera användarflödet
När användare försöker logga in på din app startar appen en autentiseringsbegäran till auktoriseringsslutpunkten via ett användarflöde. Användarflödet definierar och styr användarupplevelsen. När användarna har slutfört användarflödet genererar Azure AD B2C en token och omdirigerar sedan användarna tillbaka till ditt program.
Om du inte redan har gjort det skapar du ett användarflöde eller en anpassad princip. Upprepa stegen för att skapa tre separata användarflöden på följande sätt:
- Ett kombinerat användarflöde för inloggning och registrering , till exempel
susi
. Det här användarflödet stöder även funktionen För att glömma ditt lösenord . - Ett användarflöde för profilredigering , till exempel
edit_profile
. - Ett användarflöde för lösenordsåterställning , till exempel
reset_password
.
Azure AD B2C förbereder användarflödesnamnet B2C_1_
. Till exempel kommer susi
att bli B2C_1_susi
.
Steg 2: Registrera ett webbprogram
Om du vill göra det möjligt för ditt program att logga in med Azure AD B2C registrerar du din app i katalogen Azure AD B2C. När du registrerar din app upprättas en förtroenderelation mellan appen och Azure AD B2C.
Under appregistreringen anger du omdirigerings-URI:n. Omdirigerings-URI:n är slutpunkten som användarna omdirigeras till av Azure AD B2C när de har autentiserats med Azure AD B2C. Appregistreringsprocessen genererar ett program-ID, även kallat klient-ID, som unikt identifierar din app. När appen har registrerats använder Azure AD B2C både program-ID:t och omdirigerings-URI:n för att skapa autentiseringsbegäranden.
Steg 2.1: Registrera appen
Följ dessa steg för att skapa webbappregistreringen:
Logga in på Azure-portalen.
Om du har åtkomst till flera klienter väljer du ikonen Inställningar på den översta menyn för att växla till din Azure AD B2C-klient från menyn Kataloger + prenumerationer.
I Azure Portal söker du efter och väljer Azure AD B2C.
Välj Appregistreringar och välj sedan Ny registrering.
Under Namn anger du ett namn för programmet (till exempel webapp1).
Under Kontotyper som stöds, välj Konton i valfri identitetsleverantör eller organisationskatalog (för autentisering av användare med användarflöden).
Under Omdirigerings-URI väljer du Webb och i rutan URL anger du
http://localhost:5000/getAToken
sedan .Under Behörigheter väljer du kryssrutan Bevilja administratörsmedgivande till openid- och offlineåtkomstbehörigheter .
Välj Registrera.
Välj Översikt.
Registrera program-ID :t (klient) för senare användning när du konfigurerar webbprogrammet.
Steg 2.2: Skapa en webbappsklienthemlighet
Skapa en klienthemlighet för det registrerade webbprogrammet. Webbprogrammet använder klienthemligheten för att bevisa sin identitet när den begär token.
- Under Hantera väljer du Certifikat och hemligheter.
- Välj Ny klienthemlighet.
- I rutan Beskrivning anger du en beskrivning av klienthemligheten (till exempel clientsecret1).
- Under Upphör att gälla väljer du en varaktighet för vilken hemligheten är giltig och väljer sedan Lägg till.
- Registrera hemlighetens värde. Du använder det här värdet för konfiguration i ett senare steg.
Steg 3: Hämta webbappexemplet
Ladda ned zip-filen eller klona exempelwebbprogrammet från GitHub.
git clone https://github.com/Azure-Samples/ms-identity-python-webapp.git
Extrahera exempelfilen till en mapp där sökvägens totala längd är 260 eller färre tecken.
Steg 4: Konfigurera exempelwebbappen
Följ dessa steg i projektets rotkatalog:
Skapa en
.env
fil i rotmappen för projektet med hjälp av.env.sample
som en guide.FLASK_DEBUG=True B2C_TENANT_NAME=<tenant name> CLIENT_ID=<client id> CLIENT_SECRET=<client secret> SIGNUPSIGNIN_USER_FLOW=B2C_1_signupsignin1 EDITPROFILE_USER_FLOW=B2C_1_profile_editing RESETPASSWORD_USER_FLOW=B2C_1_reset_password
Tangent Värde B2C_TENANT_NAME
Den första delen av ditt Azure AD B2C-klientnamn (till exempel contoso
).CLIENT_ID
Webb-API-program-ID från steg 2.1. CLIENT_SECRET
Det klienthemlighetsvärde som du skapade i steg 2.2. *_USER_FLOW
Användarflödena som du skapade i steg 1. Miljövariablerna refereras i app_config.py och lagras i en separat .env-fil för att hålla dem borta från källkontrollen. Den angivna .gitignore-filen förhindrar att .env-filen checkas in.
Steg 5: Kör exempelwebbappen
I konsolen eller terminalen växlar du till katalogen som innehåller exemplet. Till exempel:
cd ms-identity-python-webapp
Installera de paket som krävs från PyPi och kör webbappen på den lokala datorn genom att köra följande kommandon:
python -m pip install -r requirements.txt python -m flask run --host localhost --port 5000
Konsolfönstret visar portnumret för det lokalt körda programmet:
* Debug mode: on WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on `http://localhost:5000/` (Press CTRL+C to quit)
Om du vill visa webbprogrammet som körs på den lokala datorn går du till
http://localhost:5000
.Välj Logga in.
Slutför registreringen eller inloggningsprocessen.
Efter lyckad autentisering visas visningsnamnet, som du ser här:
Steg 6: Anropa ett webb-API
Om du vill att din app ska kunna logga in med Azure AD B2C och anropa ett webb-API måste du registrera två program i Azure AD B2C-katalogen.
Den webbappsregistrering (Python) som du redan skapade i steg 2. Med den här appregistreringen kan din app logga in med Azure AD B2C. Appregistreringsprocessen genererar ett program-ID, även kallat klient-ID, som unikt identifierar din app. Till exempel app-ID: 1.
Med registreringen av webb-API :et kan din app anropa ett skyddat webb-API. Registreringen exponerar webb-API-behörigheter (omfång). Appregistreringsprocessen genererar ett program-ID som unikt identifierar ditt webb-API (till exempel app-ID: 2). Ge din app (app-ID: 1) behörighet till webb-API-omfången (app-ID: 2).
Appregistreringarna och programarkitekturen beskrivs i följande diagram:
När autentiseringen har slutförts interagerar användarna med appen, som anropar ett skyddat webb-API. Webb-API:et använder ägartokenautentisering . Ägartoken är den åtkomsttoken som appen fick från Azure AD B2C. Appen skickar token i auktoriseringshuvudet för HTTPS-begäran.
Authorization: Bearer <access token>
Om åtkomsttokens omfång inte matchar webb-API:ets omfång hämtar autentiseringsbiblioteket en ny åtkomsttoken med rätt omfång.
Steg 6.1: Registrera webb-API-appen
Så här skapar du appregistreringen för webb-API:et (app-ID: 2):
Logga in på Azure-portalen.
Kontrollera att du använder katalogen som innehåller din Azure AD B2C-klientorganisation. Välj ikonen Kataloger + prenumerationer i portalens verktygsfält.
I portalinställningarna | Sidan Kataloger + prenumerationer, leta upp din Azure AD B2C-katalog i listan Katalognamn och välj sedan Växla.
I Azure Portal söker du efter och väljer Azure AD B2C.
Välj Appregistreringar och välj sedan Ny registrering.
Som Namn anger du ett namn för programmet (till exempel my-api1). Lämna standardvärdena för omdirigerings-URI och kontotyper som stöds.
Välj Registrera.
När appregistreringen är klar väljer du Översikt.
Registrera program-ID-värdet (klient) för senare användning när du konfigurerar webbprogrammet.
Steg 6.2: Konfigurera omfång
Välj det my-api1-program som du skapade (app-ID: 2) för att öppna sidan Översikt .
Under Hantera väljer du Exponera ett API.
Bredvid Program-ID-URI väljer du länken Ange. Ersätt standardvärdet (GUID) med ett unikt namn (till exempel tasks-api) och välj sedan Spara.
När ditt webbprogram begär en åtkomsttoken för webb-API:et bör den lägga till den här URI:n som prefix för varje omfång som du definierar för API:et.
Under Omfång som definieras av det här API:et väljer du Lägg till ett omfång.
Så här skapar du ett omfång som definierar läsåtkomst till API:et:
- Ange tasks.read som Omfångsnamn.
- För Visningsnamn för administratörsmedgivande anger du Läs åtkomst till uppgifters API.
- För Beskrivning av administratörsmedgivande anger du Tillåt läsåtkomst till aktivitets-API:et.
Välj Lägg till definitionsområde.
Välj Lägg till ett omfång och lägg sedan till ett omfång som definierar skrivåtkomst till API:et:
- Ange tasks.write som Omfångsnamn.
- För Visningsnamn för administratörsmedgivande anger du Skrivåtkomst till aktivitets-API.
- För Beskrivning av administratörsmedgivande anger du Tillåt skrivåtkomst till aktivitets-API:et.
Välj Lägg till definitionsområde.
Steg 6.3: Bevilja webbappen behörigheter
Följ dessa steg för att ge din app (app-ID: 1) behörighet:
Välj Appregistreringar och välj sedan den app som du skapade (app-ID: 1).
Under Hantera väljer du API-behörigheter.
Under Konfigurerade behörigheter väljer du Lägg till en behörighet.
Välj fliken Mina API:er .
Välj det API (app-ID: 2) som webbprogrammet ska beviljas åtkomst till. Ange till exempel my-api1.
Under Behörighet expanderar du aktiviteter och väljer sedan de omfång som du definierade tidigare (till exempel tasks.read och tasks.write).
Välj Lägg till behörigheter.
Välj Bevilja administratörsmedgivande för< ditt klientnamn>.
Välj Ja.
Välj Uppdatera och kontrollera sedan att Beviljad för ... visas under Status för båda omfången.
I listan Konfigurerade behörigheter väljer du ditt omfång och kopierar sedan det fullständiga omfångsnamnet.
Steg 6.4: Konfigurera webb-API:et
Det här exemplet hämtar en åtkomsttoken med relevanta omfång som webbappen kan använda för ett webb-API. Det här exemplet fungerar inte som ett webb-API. I stället måste du använda ett befintligt webb-API eller skapa ett nytt. En självstudiekurs om hur du skapar ett webb-API i din B2C-klient finns i Aktivera autentisering i ditt eget webb-API med hjälp av Azure AD B2C.
Steg 6.5: Konfigurera exempelappen med webb-API:et
Öppna filen app_config.py . Den här filen innehåller information om din Azure AD B2C-identitetsprovider. Uppdatera följande egenskaper för appinställningarna:
Tangent | Värde |
---|---|
ENDPOINT |
URI:n för ditt webb-API (till exempel https://localhost:6000/hello ). |
SCOPE |
Webb-API :ets omfång som du skapade (till exempel ["https://contoso.onmicrosoft.com/tasks-api/tasks.read", https://contoso.onmicrosoft.com/tasks-api/tasks.write"] ). |
Steg 6.6: Kör exempelappen
I konsolen eller terminalen växlar du till katalogen som innehåller exemplet.
Om appen inte fortfarande körs startar du om den med kommandot från steg 5.
Välj Anropa ett underordnat API.
Steg 7: Distribuera ditt program
I ett produktionsprogram är omdirigerings-URI:n för appregistrering vanligtvis en offentligt tillgänglig slutpunkt där appen körs, till exempel https://contoso.com/getAToken
.
Du kan lägga till och ändra omdirigerings-URI:er i dina registrerade program när som helst. Följande begränsningar gäller för omdirigerings-URI:er:
- Omdirigerings-URL:en måste börja med schemat
https
. - Omdirigerings-URL:en är skiftlägeskänslig. Ärendet måste matcha fallet med URL-sökvägen för ditt program som körs.