Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln visar ett Java JBoss EAP-program som autentiserar användare mot Azure Active Directory B2C (Azure AD B2C) med hjälp av Microsoft Authentication Library for Java (MSAL4J).
Följande diagram visar appens topologi:
Diagram som visar appens topologi.
Appen använder MSAL4J för att logga in användare och hämta en ID-token från Azure AD B2C. ID-token bevisar att användaren autentiseras mot en Azure AD B2C-klientorganisation.
Förutsättningar
- JDK version 8 eller senare
- Maven 3
- En Azure AD B2C-klientorganisation. Mer information finns i Självstudie: Skapa en Azure Active Directory B2C-klientorganisation
- Ett användarkonto i din Azure AD B2C-klientorganisation.
Rekommendationer
- Viss kunskap om Java/Jakarta Servlets.
- Viss kunskap om Linux/OSX-terminalen.
- jwt.ms för att inspektera dina token.
- Fiddler för övervakning av nätverksaktivitet och felsökning.
- Följ Microsoft Entra ID-bloggen för att hålla dig uppdaterad med den senaste utvecklingen.
Konfigurera exemplet
I följande avsnitt visas hur du konfigurerar exempelprogrammet.
Klona eller ladda ned exempellagringsplatsen
Om du vill klona exemplet öppnar du ett Bash-fönster och använder följande kommando:
git clone https://github.com/Azure-Samples/ms-identity-msal-java-samples.git
cd 3-java-servlet-web-app/1-Authentication/sign-in-b2c
Du kan också gå till lagringsplatsen ms-identity-msal-java-samples och sedan ladda ned den som en .zip fil och extrahera den till hårddisken.
Viktigt!
För att undvika begränsningar för filsökvägslängd i Windows klonar eller extraherar du lagringsplatsen till en katalog nära hårddiskens rot.
Registrera exempelprogrammet med din Azure AD B2C-klientorganisation
Exemplet levereras med ett förregistrerat program i testsyfte. Om du vill använda din egen Azure AD B2C-klientorganisation och ditt program följer du stegen i följande avsnitt för att registrera och konfigurera programmet i Azure Portal. Annars fortsätter du med stegen för Kör exemplet.
Välj den Azure AD B2C-klientorganisation där du vill skapa dina program
Använd följande steg för att välja klientorganisation:
Logga in på Azure-portalen.
Om ditt konto finns i mer än en Azure AD B2C-klientorganisation väljer du din profil i hörnet av Azure Portal och väljer sedan Växla katalog för att ändra sessionen till önskad Azure AD B2C-klientorganisation.
Skapa användarflöden och anpassade principer
Information om hur du skapar vanliga användarflöden som registrering, inloggning, profilredigering och lösenordsåterställning finns i Självstudie: Skapa användarflöden i Azure Active Directory B2C.
Du bör även överväga att skapa anpassade principer i Azure Active Directory B2C , men detta ligger utanför omfånget för den här självstudien.
Lägga till externa identitetsprovidrar
Se Självstudie: Lägga till identitetsprovidrar i dina program i Azure Active Directory B2C.
Registrera appen (ms-identity-b2c-java-servlet-webapp-authentication)
Använd följande steg för att registrera appen:
Välj Appregistreringar i navigeringsfönstret och välj sedan Ny registrering.
På sidan Registrera ett program som visas anger du följande programregistreringsinformation:
- I avsnittet Namn anger du ett beskrivande programnamn för visning för användare av appen , till exempel
ms-identity-b2c-java-servlet-webapp-authentication
. - Under Kontotyper som stöds väljer du Konton i valfri organisationskatalog och personliga Microsoft-konton (t.ex. Skype, Xbox Outlook.com).
- I avsnittet Omdirigerings-URI (valfritt) väljer du Webb i kombinationsrutan och anger följande omdirigerings-URI:
http://localhost:8080/ms-identity-b2c-java-servlet-webapp-authentication/auth_redirect
.
- I avsnittet Namn anger du ett beskrivande programnamn för visning för användare av appen , till exempel
Välj Registrera för att skapa programmet.
På appens registreringssida letar du upp och kopierar värdet program-ID (klient) för senare användning. Du använder det här värdet i appens konfigurationsfil eller filer.
Välj Spara för att spara dina ändringar.
På appens registreringssida väljer du Certifikat och hemligheter i navigeringsfönstret för att öppna sidan där du kan generera hemligheter och ladda upp certifikat.
Under avsnittet Klienthemlighet välj Ny klienthemlighet.
Skriv en beskrivning – till exempel apphemlighet.
Välj en av de tillgängliga varaktigheterna: Om ett år, Om två år eller Aldrig upphör att gälla.
Markera Lägga till. Det genererade värdet visas.
Kopiera och spara det genererade värdet för användning i senare steg. Du behöver det här värdet för kodens konfigurationsfiler. Det här värdet visas inte igen och du kan inte hämta det på något annat sätt. Se därför till att spara den från Azure Portal innan du går till någon annan skärm eller ett annat fönster.
Konfigurera appen (ms-identity-b2c-java-servlet-webapp-authentication) för att använda din appregistrering
Använd följande steg för att konfigurera appen:
Kommentar
I följande steg ClientID
är samma som Application ID
eller AppId
.
Öppna projektet i din IDE.
Öppna filen ./src/main/resources/authentication.properties.
Leta upp
aad.clientId
egenskapen och ersätt det befintliga värdet med program-ID:t ellerms-identity-b2c-java-servlet-webapp-authentication
clientId
programmet från Azure Portal.Leta upp
aad.secret
egenskapen och ersätt det befintliga värdet med det värde som du sparade när programmet skapadesms-identity-b2c-java-servlet-webapp-authentication
från Azure Portal.Leta upp
aad.scopes
egenskapen och ersätt det befintliga programklient-ID:et med det värde som du placerade iaad.clientId
i steg 1 i det här avsnittet.Leta upp
aad.authority
egenskapen och ersätt den första instansen avfabrikamb2c
med namnet på Azure AD B2C-klientorganisationen där du skapadems-identity-b2c-java-servlet-webapp-authentication
programmet i Azure Portal.Leta upp
aad.authority
egenskapen och ersätt den andra instansen avfabrikamb2c
med namnet på Azure AD B2C-klientorganisationen där du skapadems-identity-b2c-java-servlet-webapp-authentication
programmet i Azure Portal.aad.signInPolicy
Leta upp egenskapen och ersätt den med namnet på registrerings-/inloggningsprincipen för användarflöde som du skapade i Azure AD B2C-klientorganisationen där du skapadems-identity-b2c-java-servlet-webapp-authentication
programmet i Azure Portal.Leta upp
aad.passwordResetPolicy
egenskapen och ersätt den med namnet på principen för lösenordsåterställning av användarflöde som du skapade i Azure AD B2C-klientorganisationen där du skapadems-identity-b2c-java-servlet-webapp-authentication
programmet i Azure Portal.Leta upp
aad.editProfilePolicy
egenskapen och ersätt den med namnet på användarflödesprincipen för redigeringsprofilen som du skapade i Azure AD B2C-klientorganisationen där du skapadems-identity-b2c-java-servlet-webapp-authentication
programmet i Azure Portal.
Skapa exemplet
Om du vill skapa exemplet med Maven går du till katalogen som innehåller pom.xml-filen för exemplet och kör sedan följande kommando:
mvn clean package
Det här kommandot genererar en .war-fil som du kan köra på olika programservrar.
Kör exemplet
Följande avsnitt visar hur du distribuerar exemplet till Azure App Service.
Förutsättningar
Maven-plugin-program för Azure App Service-appar
Om Maven inte är det utvecklingsverktyg du föredrar kan du läsa följande liknande självstudier som använder andra verktyg:
Konfigurera Maven-plugin-programmet
Distributionsprocessen till Azure App Service använder dina Azure-autentiseringsuppgifter från Azure CLI automatiskt. Om Azure CLI inte installeras lokalt autentiseras Maven-plugin-programmet med OAuth eller enhetsinloggning. Mer information finns i autentisering med Maven-plugin-program.
Använd följande steg för att konfigurera plugin-programmet:
Kör maven-kommandot som visas bredvid för att konfigurera distributionen. Det här kommandot hjälper dig att konfigurera App Service-operativsystemet, Java-versionen och Tomcat-versionen.
mvn com.microsoft.azure:azure-webapp-maven-plugin:2.12.0:config
Tryck på Y för Skapa ny körningskonfiguration och tryck sedan på Retur.
För Definiera värde för operativsystem trycker du på 2 för Linux och trycker sedan på Retur.
För Definiera värde för javaVersion trycker du på 2 för Java 11 och trycker sedan på Retur.
För Definiera värde för webContainer trycker du på 1 för JBosseap7 och trycker sedan på Retur.
För Definiera värde för pricingTier trycker du på Retur för att välja standardnivån P1v3 .
Tryck på Y för Bekräfta och tryck sedan på Retur.
I följande exempel visas utdata från distributionsprocessen:
Please confirm webapp properties
AppName : msal4j-servlet-auth-1707220080695
ResourceGroup : msal4j-servlet-auth-1707220080695-rg
Region : centralus
PricingTier : P1v3
OS : Linux
Java Version: Java 11
Web server stack: JBosseap 7
Deploy to slot : false
Confirm (Y/N) [Y]:
[INFO] Saving configuration to pom.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 26.196 s
[INFO] Finished at: 2024-02-06T11:48:16Z
[INFO] ------------------------------------------------------------------------
När du har bekräftat dina val lägger plugin-programmet till konfigurationen av plugin-programmet och nödvändiga inställningar i projektets pom.xml-fil för att konfigurera appen så att den körs i Azure App Service.
Den relevanta delen av pom.xml-filen bör se ut ungefär som i följande exempel:
<build>
<plugins>
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>>azure-webapp-maven-plugin</artifactId>
<version>x.xx.x</version>
<configuration>
<schemaVersion>v2</schemaVersion>
<resourceGroup>your-resourcegroup-name</resourceGroup>
<appName>your-app-name</appName>
...
</configuration>
</plugin>
</plugins>
</build>
Du kan ändra konfigurationerna för App Service direkt i pom.xml. Några vanliga konfigurationer visas i följande tabell:
Property | Obligatoriskt | Beskrivning | Version |
---|---|---|---|
schemaVersion |
falskt | Versionen av konfigurationsschemat. Värden som stöds är v1 och v2 . |
1.5.2 |
subscriptionId |
falskt | Prenumerations-ID:t. | 0.1.0+ |
resourceGroup |
true | Azure-resursgruppen för din app. | 0.1.0+ |
appName |
true | Namnet på din app. | 0.1.0+ |
region |
falskt | Den region där appen ska vara värd. Standardvärdet är centralus . Giltiga regioner finns i Regioner som stöds. |
0.1.0+ |
pricingTier |
falskt | Prisnivån för din app. Standardvärdet är P1v2 för en produktionsarbetsbelastning. Det rekommenderade minimivärdet för Java-utveckling och -testning är B2 . Mer information finns i Priser för App Service |
0.1.0+ |
runtime |
falskt | Konfigurationen av körningsmiljön. Mer information finns i Konfigurationsinformation. | 0.1.0+ |
deployment |
falskt | Distributionskonfigurationen. Mer information finns i Konfigurationsinformation. | 0.1.0+ |
En fullständig lista över konfigurationer finns i referensdokumentationen för plugin-programmet. Alla Azure Maven-plugin-program delar en gemensam uppsättning konfigurationer. De här konfigurationerna finns i Vanliga konfigurationer. Konfigurationer som är specifika för Azure App Service finns i Azure-app: Konfigurationsinformation.
Se till att spara värdena appName
och resourceGroup
för senare användning.
Förbereda appen för distribution
När du distribuerar programmet till App Service ändras omdirigerings-URL:en till omdirigerings-URL:en för din distribuerade appinstans. Använd följande steg för att ändra de här inställningarna i egenskapsfilen:
Navigera till appens authentication.properties-fil och ändra värdet
app.homePage
för till den distribuerade appens domännamn, som du ser i följande exempel. Om du till exempel valdeexample-domain
för ditt appnamn i föregående steg måste du nu användahttps://example-domain.azurewebsites.net
förapp.homePage
värdet. Se till att du också har ändrat protokollet frånhttp
tillhttps
.# app.homePage is by default set to dev server address and app context path on the server # for apps deployed to azure, use https://your-sub-domain.azurewebsites.net app.homePage=https://<your-app-name>.azurewebsites.net
När du har sparat den här filen använder du följande kommando för att återskapa din app:
mvn clean package
Viktigt!
I samma authentication.properties-fil har du en inställning för din aad.secret
. Det är inte bra att distribuera det här värdet till App Service. Det är inte heller en bra idé att lämna det här värdet i koden och eventuellt push-överföra det till git-lagringsplatsen. Om du vill ta bort det här hemliga värdet från koden hittar du mer detaljerad vägledning i avsnittet Distribuera till App Service – Ta bort hemlighet . Den här vägledningen lägger till extra steg för att push-överföra det hemliga värdet till Key Vault och för att använda Key Vault-referenser.
Uppdatera din Microsoft Entra ID-appregistrering
Eftersom omdirigerings-URI:n ändras till din distribuerade app till Azure App Service måste du också ändra omdirigerings-URI:n i din Microsoft Entra ID-appregistrering. Gör den här ändringen med hjälp av följande steg:
Gå till sidan Microsofts identitetsplattform för utvecklare Appregistreringar.
Använd sökrutan för att söka efter din appregistrering – till exempel
java-servlet-webapp-authentication
.Öppna appregistreringen genom att välja dess namn.
Markera Autentisering på kommandomenyn.
I avsnittet Omdirigerings-URI:er för webben - väljer du Lägg till URI.
Fyll i URI:n för din app och lägg till
/auth/redirect
– till exempelhttps://<your-app-name>.azurewebsites.net/auth/redirect
.Välj Spara.
Distribuera appen
Nu är du redo att distribuera din app till Azure App Service. Använd följande kommando för att se till att du är inloggad i Azure-miljön för att köra distributionen:
az login
Med all konfiguration klar i din pom.xml-fil kan du nu använda följande kommando för att distribuera din Java-app till Azure:
mvn package azure-webapp:deploy
När distributionen är klar är programmet redo på http://<your-app-name>.azurewebsites.net/
. Öppna URL:en med din lokala webbläsare, där du bör se programmets msal4j-servlet-auth
startsida.
Utforska exemplet
Använd följande steg för att utforska exemplet:
- Observera den inloggade eller utloggade statusen som visas i mitten av skärmen.
- Välj den sammanhangskänsliga knappen i hörnet. Den här knappen läser Logga in när du först kör appen.
- På nästa sida följer du anvisningarna och loggar in med ett konto för din valda identitetsprovider.
- Observera att den sammanhangskänsliga knappen nu säger Logga ut och visar ditt användarnamn.
- Välj ID-tokeninformation för att se några av ID-tokens avkodade anspråk.
- Du kan också redigera din profil. Välj länken för att redigera information som ditt visningsnamn, bostadsort och yrke.
- Använd knappen i hörnet för att logga ut.
- När du har loggat ut går du till följande URL för sidan med tokeninformation:
http://localhost:8080/ms-identity-b2c-java-servlet-webapp-authentication/auth_token_details
. Här kan du se hur appen visar ett401: unauthorized
fel i stället för ID-tokenanspråken.
Om koden
Det här exemplet visar hur du använder MSAL4J för att logga in användare i din Azure AD B2C-klientorganisation.
Innehåll
I följande tabell visas innehållet i exempelprojektmappen:
Fil/mapp | Beskrivning |
---|---|
AuthHelper.java | Hjälpfunktioner för autentisering. |
Config.java | Körs vid start och konfigurerar egenskapsläsare och loggning. |
authentication.properties | Microsoft Entra-ID och programkonfiguration. |
AuthenticationFilter.java | Omdirigerar oautentiserade begäranden till skyddade resurser till en 401-sida. |
MsalAuthSession | Instansierad med en HttpSession . Lagrar alla MSAL-relaterade sessionsattribut i sessionsattribut. |
*Servlet.java | Alla tillgängliga slutpunkter definieras i Java-klasser med namn som slutar Servlet. . |
CHANGELOG.md | Lista över ändringar i exemplet. |
CONTRIBUTING.md | Riktlinjer för att bidra till exemplet. |
LICENS | Licensen för exemplet. |
ConfidentialClientApplication
En ConfidentialClientApplication
instans skapas i AuthHelper.java-filen, som du ser i följande exempel. Det här objektet hjälper dig att skapa Azure AD B2C-auktoriserings-URL:en och hjälper även till att byta ut autentiseringstoken mot en åtkomsttoken.
IClientSecret secret = ClientCredentialFactory.createFromSecret(SECRET);
confClientInstance = ConfidentialClientApplication
.builder(CLIENT_ID, secret)
.b2cAuthority(AUTHORITY + policy)
.build();
Följande parametrar används för instansiering:
- Appens klient-ID.
- Klienthemligheten, som är ett krav för konfidentiella klientprogram.
- Azure AD B2C-utfärdaren sammanfogade med lämplig för
UserFlowPolicy
registrering, inloggning, profilredigering eller lösenordsåterställning.
I det här exemplet läss dessa värden från filen authentication.properties med hjälp av en egenskapsläsare i filen Config.java .
Stegvis genomgång
Följande steg innehåller en genomgång av appens funktioner:
Det första steget i inloggningsprocessen är att skicka en begäran till
/authorize
slutpunkten för din Azure Active Directory B2C-klientorganisation. MSAL4J-instansenConfidentialClientApplication
används för att konstruera en URL för auktoriseringsbegäran och appen omdirigerar webbläsaren till den här URL:en, enligt följande exempel:final ConfidentialClientApplication client = getConfidentialClientInstance(policy); final AuthorizationRequestUrlParameters parameters = AuthorizationRequestUrlParameters .builder(REDIRECT_URI, Collections.singleton(SCOPES)).responseMode(ResponseMode.QUERY) .prompt(Prompt.SELECT_ACCOUNT).state(state).nonce(nonce).build(); final String redirectUrl = client.getAuthorizationRequestUrl(parameters).toString(); Config.logger.log(Level.INFO, "Redirecting user to {0}", redirectUrl); resp.setStatus(302); resp.sendRedirect(redirectUrl);
I följande lista beskrivs funktionerna i den här koden:
AuthorizationRequestUrlParameters
: Parametrar som måste anges för att skapa en AuthorizationRequestUrl.REDIRECT_URI
: När Azure AD B2C omdirigerar webbläsaren – tillsammans med autentiseringskoden – efter att användarens autentiseringsuppgifter har samlats in.SCOPES
: Omfång är behörigheter som begärs av programmet.Normalt räcker det med de tre omfången
openid profile offline_access
för att ta emot ett ID-tokensvar. MSAL4J kräver dock att alla svar från Azure AD B2C även innehåller en åtkomsttoken.För att Azure AD B2C ska kunna dela ut en åtkomsttoken och en ID-token måste begäran innehålla ytterligare ett resursomfång. Eftersom den här appen inte kräver något externt resursomfång lägger den till ett eget klient-ID som ett fjärde omfång för att kunna ta emot en åtkomsttoken.
Du hittar en fullständig lista över omfång som begärs av appen i filen authentication.properties .
ResponseMode.QUERY
: Azure AD B2C kan returnera svaret som formulärparamer i en HTTP POST-begäran eller som frågesträngparamer i en HTTP GET-begäran.Prompt.SELECT_ACCOUNT
: Azure AD B2C bör be användaren att välja det konto som de tänker autentisera mot.state
: En unik variabel som anges av appen i sessionen för varje tokenbegäran och förstörs efter att motsvarande Azure AD B2C-återanrop har tagits emot. Tillståndsvariabeln säkerställer att Azure AD B2C-begäranden till/auth_redirect endpoint
faktiskt kommer från Azure AD B2C-auktoriseringsbegäranden som kommer från den här appen och den här sessionen, vilket förhindrar CSRF-attacker. Detta görs i filen AADRedirectServlet.java .nonce
: En unik variabel som anges av appen i sessionen för varje tokenbegäran och förstörs när motsvarande token har tagits emot. Den här nonce transkriberas till de resulterande token som har delats ut från Azure AD B2C, vilket säkerställer att det inte sker någon tokenreprisattack.
Användaren får en inloggningsprompt av Azure Active Directory B2C. Om inloggningsförsöket lyckas omdirigeras användarens webbläsare till appens omdirigeringsslutpunkt. En giltig begäran till den här slutpunkten innehåller en auktoriseringskod.
Instansen
ConfidentialClientApplication
utbyter sedan den här auktoriseringskoden för en ID-token och åtkomsttoken från Azure Active Directory B2C, som du ser i följande exempel:final AuthorizationCodeParameters authParams = AuthorizationCodeParameters .builder(authCode, new URI(REDIRECT_URI)) .scopes(Collections.singleton(SCOPES)).build(); final ConfidentialClientApplication client = AuthHelper .getConfidentialClientInstance(policy); final Future<IAuthenticationResult> future = client.acquireToken(authParams); final IAuthenticationResult result = future.get();
I följande lista beskrivs funktionerna i den här koden:
AuthorizationCodeParameters
: Parametrar som måste anges för att kunna byta auktoriseringskoden mot ett ID och/eller en åtkomsttoken.authCode
: Auktoriseringskoden som togs emot vid omdirigeringsslutpunkten.REDIRECT_URI
: Omdirigerings-URI:n som användes i föregående steg måste skickas igen.SCOPES
: Omfången som användes i föregående steg måste skickas igen.
Om
acquireToken
det lyckas extraheras tokenanspråken och nonce-anspråket verifieras mot den nonce som lagras i sessionen, enligt följande exempel:parseJWTClaimsSetAndStoreResultInSession(msalAuth, result, serializedTokenCache); validateNonce(msalAuth) processSuccessfulAuthentication(msalAuth);
Om nonce har verifierats placeras autentiseringsstatusen i en session på serversidan med metoder som exponeras av
MsalAuthSession
klassen, enligt följande exempel:msalAuth.setAuthenticated(true); msalAuth.setUsername(msalAuth.getIdTokenClaims().get("name"));
Mer information
- Vad är Azure Active Directory B2C?
- Programtyper som kan användas i Active Directory B2C
- Rekommendationer och metodtips för Azure Active Directory B2C
- Azure AD B2C-session
- Microsoft Authentication Library (MSAL) för Java
Mer information om hur OAuth 2.0-protokoll fungerar i det här scenariot och andra scenarier finns i Autentiseringsscenarier för Microsoft Entra-ID.