Aanmelden inschakelen voor Java WebSphere-apps met MSAL4J met Azure Active Directory B2C

In dit artikel wordt een Java Servlet-toepassing beschreven die gebruikers verifieert via Azure Active Directory B2C (Azure AD B2C) met behulp van de Microsoft Authentication Library voor Java (MSAL4J).

Notitie

Vanaf 1 mei 2025 is Azure Active Directory B2C niet meer beschikbaar voor nieuwe klanten. Bestaande klanten kunnen Azure AD B2C blijven gebruiken, met ondersteuning tot ten minste mei 2030. Gebruik in plaats daarvan Microsoft Entra Externe id voor nieuwe CIAM-projecten (Identity and Access Management).

In het volgende diagram ziet u de topologie van de app:

Diagram dat de topologie van de app toont.

De app gebruikt MSAL4J om gebruikers aan te melden en een ID token op te halen bij Azure AD B2C. Het id-token bewijst dat de gebruiker is geverifieerd op basis van een Azure AD B2C-tenant.

Vereisten

  • JDK versie 8 of hoger
  • Maven 3
  • Een Azure AD B2C-tenant. Zie Zelfstudie: een Azure Active Directory B2C-tenant maken voor meer informatie.
  • Een gebruikersaccount in uw Azure AD B2C-tenant.
  • WebSphere
  • Visual Studio Code
  • Azure Tools voor Visual Studio Code

Aanbevelingen

  • Enige vertrouwdheid met de Java / Jakarta Servlets.
  • Enige bekendheid met Linux/OSX-terminal.
  • jwt.ms om uw tokens te inspecteren.
  • Fiddler om uw netwerkactiviteit te controleren en problemen op te lossen.
  • Volg de Microsoft Entra-blog om up-to-date te blijven met de nieuwste ontwikkelingen.

Het voorbeeld instellen

In de volgende secties ziet u hoe u de voorbeeldtoepassing instelt.

De voorbeeldopslagplaats klonen of downloaden

Als u het voorbeeld wilt klonen, opent u een Bash-venster en gebruikt u de volgende opdracht:

git clone https://github.com/Azure-Samples/ms-identity-msal-java-samples.git
cd 3-java-servlet-web-app/1-Authentication/sign-in-b2c

U kunt ook naar de ms-identity-msal-java-samples-repository gaan, deze vervolgens als een .zip-bestand downloaden en op uw harde schijf uitpakken.

Belangrijk

Om beperkingen voor bestandspadlengten in Windows te voorkomen, kloont of extraheert u de opslagplaats in een map in de buurt van de hoofdmap van uw harde schijf.

De voorbeeldtoepassing registreren bij uw Azure AD B2C-tenant

Het voorbeeld wordt geleverd met een vooraf geregistreerde toepassing voor testdoeleinden. Als u uw eigen Azure AD B2C-tenant en -toepassing wilt gebruiken, volgt u de stappen in de volgende secties om de toepassing te registreren en te configureren in Azure Portal. Ga anders verder met de stappen voor Het voorbeeld uitvoeren.

Kies de Azure AD B2C-tenant waar u uw toepassingen wilt maken

Gebruik de volgende stappen om uw tenant te kiezen:

  1. Meld u aan bij de Azure Portal.

  2. Als uw account aanwezig is in meer dan één Azure AD B2C-tenant, selecteert u uw profiel in de hoek van het Azure-portal en selecteert u vervolgens Van map wisselen om uw sessie te wijzigen naar de gewenste Azure AD B2C-tenant.

Gebruikersstromen en aangepast beleid maken

Raadpleeg zelfstudie: gebruikersstromen maken in Azure Active Directory B2C voor het maken van algemene gebruikersstromen, zoals registreren, aanmelden, profielbewerking en het opnieuw instellen van wachtwoorden.

U kunt ook overwegen om aangepaste beleidsregels in Azure Active Directory B2C te maken, maar dit valt buiten het bestek van deze zelfstudie.

Externe id-providers toevoegen

Zie Zelfstudie: identiteitsproviders toevoegen aan uw toepassingen in Azure Active Directory B2C.

Registreer de app (ms-identity-b2c-java-servlet-webapp-authentication)

Voer de volgende stappen uit om de app te registreren:

  1. Navigeer naar het Azure-portal en selecteer Azure AD B2C.

  2. Selecteer App-registraties in het navigatiedeelvenster en selecteer vervolgens Nieuwe registratie.

  3. Voer op de pagina Een toepassing registreren die wordt weergegeven de volgende registratiegegevens voor de toepassing in:

    • Voer in de sectie Naam een duidelijke toepassingsnaam in die aan gebruikers van de app wordt weergegeven, bijvoorbeeld .
    • Selecteer onder Ondersteunde accounttypen accounts in een organisatiedirectory en persoonlijke Microsoft-accounts (bijvoorbeeld Skype, Xbox, Outlook.com).
    • Selecteer in de sectie Omleidings-URI (optioneel) in de keuzelijst Web en voer de volgende omleidings-URI in: .
  4. Selecteer Registreren om de toepassing te maken.

  5. Ga op de registratiepagina van de app naar de waarde van Toepassings-id (client) en kopieer deze om later te gebruiken. U gebruikt deze waarde in het configuratiebestand of de bestanden van uw app.

  6. Selecteer Opslaan om uw wijzigingen op te slaan.

  7. Selecteer certificaten en geheimen op de registratiepagina van de app in het navigatiedeelvenster om de pagina te openen waar u geheimen kunt genereren en certificaten kunt uploaden.

  8. Selecteer in de sectie Clientgeheimen de optie Nieuw clientgeheim.

  9. Typ een beschrijving, bijvoorbeeld app-geheim.

  10. Selecteer een vervaldatum voor het geheim of geef een aangepaste levensduur op. Clientgeheimen zijn beperkt tot een maximale levensduur van 24 maanden en Microsoft adviseert een vervaldatum van minder dan 12 maanden. Voor productie-apps gebruikt u bij voorkeur een certificaat of federatieve identiteitsreferentie in plaats van een clientgeheim.

  11. Selecteer Toevoegen. De gegenereerde waarde wordt weergegeven.

  12. Kopieer en sla de gegenereerde waarde op voor gebruik in latere stappen. U hebt deze waarde nodig voor de configuratiebestanden van uw code. Deze waarde wordt niet opnieuw weergegeven en u kunt deze niet op een andere manier ophalen. Zorg er dus voor dat u deze opslaat in Azure Portal voordat u naar een ander scherm of deelvenster navigeert.

De app (ms-identity-b2c-java-servlet-webapp-authentication) configureren om uw app-registratie te gebruiken

Gebruik de volgende stappen om de app te configureren:

Notitie

In de volgende stappen is hetzelfde als of .

  1. Open het project in uw IDE.

  2. Open het bestand ./src/main/resources/authentication.properties.

  3. Zoek de eigenschap en vervang de bestaande waarde door de toepassings-id of van de toepassing uit de Azure-portal.

  4. Zoek de eigenschap en vervang de bestaande waarde door de waarde die u hebt opgeslagen tijdens het maken van de -toepassing in de Azure-portal.

  5. Zoek de eigenschap en vervang de bestaande client-ID van de toepassing door de waarde die u in stap 1 van deze sectie in hebt ingevoerd.

  6. Zoek de eigenschap op en vervang het eerste exemplaar van door de naam van de Azure AD B2C-tenant waarin u de toepassing hebt gemaakt in de Azure-portal.

  7. Zoek de eigenschap en vervang het tweede exemplaar van door de naam van de Azure AD B2C-tenant waarin u de toepassing hebt gemaakt in de Azure-portal.

  8. Zoek de ``-eigenschap en vervang deze door de naam van het gebruikersstroombeleid voor registreren/aanmelden dat u hebt gemaakt in de Azure AD B2C-tenant waarin u de ``-toepassing hebt gemaakt in de Azure-portal.

  9. Zoek de eigenschap en vervang deze door de naam van het gebruikersstroombeleid voor het opnieuw instellen van wachtwoorden dat u hebt gemaakt in de Azure AD B2C-tenant waarin u de toepassing hebt gemaakt in de Azure-portal.

  10. Zoek de eigenschap en vervang deze door de naam van het gebruikersstroombeleid voor het profiel bewerken dat u hebt gemaakt in de Azure AD B2C-tenant waarin u de toepassing hebt gemaakt in de Azure-portal.

Compileer het voorbeeld

Als u het voorbeeld wilt bouwen met behulp van Maven, gaat u naar de map met het pom.xml-bestand voor het voorbeeld en voert u de volgende opdracht uit:

mvn clean package

Met deze opdracht wordt een WAR-bestand gegenereerd dat u op verschillende toepassingsservers kunt uitvoeren.

De voorbeeldtoepassing uitvoeren

In deze instructies wordt ervan uitgegaan dat u WebSphere hebt geïnstalleerd en een server hebt ingesteld. U kunt de richtlijnen in Deploy WebSphere Application Server (traditional) Cluster on Azure Virtuele Machines gebruiken voor een basisserverconfiguratie.

Voordat u naar WebSphere kunt implementeren, gebruikt u de volgende stappen om enkele configuratiewijzigingen aan te brengen in het voorbeeld zelf en vervolgens het pakket te bouwen of opnieuw te bouwen:

  1. Navigeer naar het bestand authentication.properties van uw app en wijzig de waarde van in de URL en het poortnummer van uw server die u wilt gebruiken, zoals weergegeven in het volgende voorbeeld:

    # 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://<server-url>:<port-number>/msal4j-servlet-auth/
    
  2. Nadat u dit bestand hebt opgeslagen, gebruikt u de volgende opdracht om uw app opnieuw te bouwen:

    mvn clean package
    
  3. Nadat het bouwen van de code is voltooid, kopieert u het bestand .war naar het bestandssysteem van uw doelserver.

U moet ook dezelfde wijziging aanbrengen in de registratie van de Azure-app, waarbij u deze instelt in Azure Portal als de waarde voor omleidings-URI op het tabblad Verificatie.

  1. Ga naar de pagina App-registraties in het Microsoft identity platform voor ontwikkelaars.

  2. Gebruik het zoekvak om naar uw app-registratie te zoeken - bijvoorbeeld .

  3. Open uw app-registratie door de naam te selecteren.

  4. Selecteer in het menu de optie Verificatie.

  5. Selecteer in de sectie WebOmleidings-URI's URI toevoegen.

  6. Vul de URI van uw app in en voeg /auth/redirect toe, bijvoorbeeld: .

  7. Selecteer Opslaan.

Gebruik de volgende stappen om het voorbeeld te implementeren met behulp van de Geïntegreerde oplossingenconsole van WebSphere:

  1. Selecteer op het tabblad Toepassingen de optie Nieuwe toepassing en vervolgens Nieuwe ondernemingstoepassing.

  2. Kies het bestand .war dat u hebt gemaakt en klik vervolgens op Volgende totdat u bij de installatiestap Contextroots toewijzen voor webmodules bent. De andere standaardinstellingen moeten goed zijn.

  3. Voor de context-root stelt u dezelfde waarde in als die na het poortnummer in de 'Redirect URI' die u hebt ingesteld in de voorbeeldconfiguratie/Azure-app-registratie. Dat wil zeggen, als de redirect-URI is, dan moet de contextroot zijn.

  4. Selecteer Voltooien.

  5. Nadat de installatie van de toepassing is voltooid, gaat u naar de sectie Bedrijfstoepassingen van WebSphere van het tabblad Toepassingen .

  6. Selecteer het WAR-bestand dat u hebt geïnstalleerd in de lijst met toepassingen en selecteer vervolgens Starten om te implementeren.

  7. Nadat de implementatie is voltooid, navigeert u naar en zou u de toepassing moeten kunnen zien.

Het voorbeeld verkennen

Gebruik de volgende stappen om het voorbeeld te verkennen:

  1. Merk op dat de aanmeldings- of afmeldstatus in het midden van het scherm wordt weergegeven.
  2. Selecteer de contextgevoelige knop in de hoek. Op deze knop staat Sign In wanneer u de app voor het eerst opent.
  3. Volg op de volgende pagina de instructies en meld u aan met een account van uw gekozen id-provider.
  4. Merk op dat de contextgevoelige knop nu Afmelden zegt en uw gebruikersnaam weergeeft.
  5. Selecteer Details van id-token om enkele van de gedecodeerde claims van het id-token weer te geven.
  6. U hebt ook de mogelijkheid om uw profiel te bewerken. Selecteer de koppeling om details te bewerken, zoals uw weergavenaam, woonplaats en beroep.
  7. Gebruik de knop in de hoek om u af te melden.
  8. Nadat u zich hebt afgemeld, gaat u naar de volgende URL voor de pagina met tokengegevens: . Hier kunt u zien hoe de app een -fout weergeeft in plaats van de claims van het ID-token.

Over de code

In dit voorbeeld ziet u hoe u MSAL4J gebruikt om gebruikers aan te melden bij uw Azure AD B2C-tenant.

Inhoud

In de volgende tabel ziet u de inhoud van de voorbeeldprojectmap:

Bestand/map Beschrijving
AuthHelper.java Helperfuncties voor verificatie.
Config.java Wordt uitgevoerd bij het opstarten en configureert de eigenschappenlezer en de logger.
authentication.properties Configuratie van Microsoft Entra-id en -programma.
AuthenticationFilter.java Leidt niet-geauthenticeerde verzoeken naar beveiligde bronnen door naar een 401-pagina.
MsalAuthSession Geïnstantieerd met een . Slaat alle MSAL-gerelateerde sessiekenmerken op in het sessiekenmerk.
*Servlet.java Alle beschikbare eindpunten worden gedefinieerd in Java-klassen met namen die eindigen op Servlet..
CHANGELOG.md Lijst met wijzigingen in het voorbeeld.
CONTRIBUTING.md Richtlijnen voor bijdragen aan het voorbeeld.
LICENTIE De licentie voor het voorbeeld.

ConfidentialClientApplication

Er wordt een exemplaar van gemaakt in het bestand AuthHelper.java, zoals in het volgende voorbeeld wordt weergegeven. Dit object helpt bij het maken van de Azure AD B2C-autorisatie-URL en helpt ook bij het uitwisselen van het verificatietoken voor een toegangstoken.

IClientSecret secret = ClientCredentialFactory.createFromSecret(SECRET);
confClientInstance = ConfidentialClientApplication
                     .builder(CLIENT_ID, secret)
                     .b2cAuthority(AUTHORITY + policy)
                     .build();

De volgende parameters worden gebruikt voor instantiëring:

  • De client-id van de app.
  • Het clientgeheim, dat vereist is voor Vertrouwelijke clienttoepassingen.
  • De Azure AD B2C-authority wordt samengevoegd met de juiste voor registratie, aanmelding, profielbewerking of het opnieuw instellen van het wachtwoord.

In dit voorbeeld worden deze waarden gelezen uit het bestand authentication.properties met behulp van een eigenschappenlezer in het bestand Config.java .

Stapsgewijze handleiding

De volgende stappen bieden een overzicht van de functionaliteit van de app:

  1. De eerste stap van het aanmeldingsproces is het versturen van een verzoek naar het -eindpunt van uw Azure Active Directory B2C-tenant. Het MSAL4J--exemplaar wordt gebruikt om een URL voor een autorisatieaanvraag samen te stellen, en de app stuurt de browser door naar deze URL, zoals in het volgende voorbeeld wordt weergegeven:

    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);
    

    In de volgende lijst worden de functies van deze code beschreven:

    • : Parameters die moeten worden ingesteld om een AuthorizationRequestUrl op te bouwen.

    • : De locatie waar Azure AD B2C de browser naartoe omleidt, samen met de autorisatiecode, nadat de gebruikersgegevens zijn verzameld.

    • : Scopes zijn machtigingen die door de toepassing worden aangevraagd.

      Normaal gesproken volstaan de drie scopes om een ID-tokenrespons te ontvangen. MSAL4J vereist echter dat alle antwoorden van Azure AD B2C ook een toegangstoken bevatten.

      Om ervoor te zorgen dat Azure AD B2C zowel een toegangstoken als een id-token uitgeeft, moet de aanvraag een aanvullende resourcescope bevatten. Omdat voor deze app geen extern resourcebereik is vereist, wordt er een eigen client-id als vierde bereik toegevoegd om een toegangstoken te ontvangen.

      U vindt een volledige lijst met machtigingen die de app aanvraagt in het bestand authentication.properties.

    • : Azure AD B2C kan het antwoord retourneren als formulierparameters in een HTTP POST-aanvraag of als queryreeksparameters in een HTTP GET-aanvraag.

    • : Azure AD B2C moet de gebruiker vragen het account te selecteren waarbij deze zich wil verifiëren.

    • : Een unieke variabele die door de app bij elke tokenaanvraag in de sessie wordt ingesteld en wordt verwijderd na ontvangst van de bijbehorende omleidingscallback van Azure AD B2C. De statevariabele zorgt ervoor dat Azure AD B2C-aanvragen naar de daadwerkelijk afkomstig zijn van Azure AD B2C-autorisatieaanvragen uit deze app en deze sessie, en voorkomt zo CSRF-aanvallen. Dit wordt gedaan in het bestand AADRedirectServlet.java .

    • : Een unieke variabele die door de app bij elke tokenaanvraag aan de sessie wordt toegevoegd en na ontvangst van het bijbehorende token weer wordt verwijderd. Deze nonce wordt opgenomen in de resulterende tokens die door Azure AD B2C worden uitgegeven, zodat er geen token replay-aanval plaatsvindt.

  2. De gebruiker krijgt een aanmeldingsprompt van Azure Active Directory B2C. Als de aanmeldingspoging is geslaagd, wordt de browser van de gebruiker omgeleid naar het omleidingseindpunt van de app. Een geldige aanvraag voor dit eindpunt bevat een autorisatiecode.

  3. Het -exemplaar wisselt vervolgens deze autorisatiecode in voor een ID-token en toegangstoken van Azure Active Directory B2C, zoals in het volgende voorbeeld wordt weergegeven:

    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();
    

    In de volgende lijst worden de functies van deze code beschreven:

    • : Parameters die moeten worden ingesteld om de autorisatiecode voor een ID-token en/of toegangstoken uit te wisselen.
    • : De autorisatiecode die is ontvangen bij het omleidingseindpunt.
    • : De redirect-URI die in de vorige stap is gebruikt, moet opnieuw worden meegegeven.
    • : De scopes die in de vorige stap zijn gebruikt, moeten opnieuw worden doorgegeven.
  4. Als succesvol is, worden de tokenclaims geëxtraheerd en wordt de nonce-claim gecontroleerd aan de hand van de nonce die in de sessie is opgeslagen, zoals in het volgende voorbeeld:

    parseJWTClaimsSetAndStoreResultInSession(msalAuth, result, serializedTokenCache);
    validateNonce(msalAuth)
    processSuccessfulAuthentication(msalAuth);
    
  5. Als de nonce met succes is gevalideerd, wordt de authenticatiestatus opgeslagen in een serversidesessie, met behulp van methoden die beschikbaar worden gesteld door de -klasse, zoals weergegeven in het volgende voorbeeld:

    msalAuth.setAuthenticated(true);
    msalAuth.setUsername(msalAuth.getIdTokenClaims().get("name"));
    

Meer informatie

  • Wat is Azure Active Directory B2C?
  • Toepassingstypen die kunnen worden gebruikt in Active Directory B2C
  • Aanbevelingen en aanbevolen procedures voor Azure Active Directory B2C
  • Azure AD B2C-sessie
  • Microsoft Authentication Library (MSAL) voor Java

Zie Authenticatiescenario's voor Microsoft Entra ID voor meer informatie over hoe OAuth 2.0-protocollen werken in dit scenario en andere scenario's.

Volgende stap

Java WebSphere-apps implementeren naar Traditional WebSphere op Virtuele Azure-machines