Aanmelden inschakelen voor Java WebLogic-apps met MSAL4J met Azure Active Directory B2C
In dit artikel wordt een Java Servlet-toepassing gedemonstreerd waarmee gebruikers worden geverifieerd op basis van Azure Active Directory B2C (Azure AD B2C) met behulp van de Microsoft Authentication Library for Java (MSAL4J).
In het volgende diagram ziet u de topologie van de app:
Diagram met de topologie van de app.
De app gebruikt MSAL4J om gebruikers aan te melden en een id-token te verkrijgen van Azure AD B2C. Het id-token bewijst dat de gebruiker wordt geverifieerd met 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.
Aanbevelingen
- Enige bekendheid met de Java / Jakarta Servlets.
- Enige bekendheid met Linux/OSX-terminal.
- jwt.ms voor het controleren van uw tokens.
- Fiddler voor het bewaken van uw netwerkactiviteit en het oplossen van problemen.
- Volg de Microsoft Entra ID-blog om op de hoogte te blijven van 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 opslagplaats ms-identity-msal-java-samples navigeren, het downloaden als een .zip-bestand en het extraheren naar uw harde schijf.
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 uitvoeren van het voorbeeld.
Kies de Azure AD B2C-tenant waar u uw toepassingen wilt maken
Gebruik de volgende stappen om uw tenant te kiezen:
Meld u aan bij het Azure-portaal.
Als uw account aanwezig is in meer dan één Azure AD B2C-tenant, selecteert u uw profiel in de hoek van Azure Portal en selecteert u vervolgens Schakelen tussen mappen om uw sessie te wijzigen in de gewenste Azure AD B2C-tenant.
Gebruikersstromen en aangepast beleid maken
Zie zelfstudie: Gebruikersstromen maken in Azure Active Directory B2C om algemene gebruikersstromen te maken, zoals registreren, aanmelden, profiel bewerken en wachtwoord opnieuw instellen.
Overweeg ook aangepaste beleidsregels te maken in Azure Active Directory B2C , maar dit valt buiten het bereik van deze zelfstudie.
Externe id-providers toevoegen
Zie zelfstudie: Id-providers toevoegen aan uw toepassingen in Azure Active Directory B2C.
De app registreren (ms-identity-b2c-java-servlet-webapp-authentication)
Voer de volgende stappen uit om de app te registreren:
Navigeer naar Azure Portal en selecteer Azure AD B2C.
Selecteer App-registraties in het navigatiedeelvenster en selecteer vervolgens Nieuwe registratie.
Voer op de pagina Een toepassing registreren die wordt weergegeven de volgende toepassingsregistratiegegevens in:
- Voer in de sectie Naam een beschrijvende toepassingsnaam in om weer te geven aan gebruikers van de app,
ms-identity-b2c-java-servlet-webapp-authentication
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) web in de keuzelijst met invoervak en voer de volgende omleidings-URI in:
http://localhost:8080/ms-identity-b2c-java-servlet-webapp-authentication/auth_redirect
.
- Voer in de sectie Naam een beschrijvende toepassingsnaam in om weer te geven aan gebruikers van de app,
Selecteer Registreren om de toepassing te maken.
Zoek en kopieer op de registratiepagina van de app de waarde van de toepassings-id (client) om later te gebruiken. U gebruikt deze waarde in het configuratiebestand of de bestanden van uw app.
Selecteer Opslaan om uw wijzigingen op te slaan.
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.
Selecteer in de sectie Clientgeheimen de optie Nieuw clientgeheim.
Typ een beschrijving, bijvoorbeeld app-geheim.
Selecteer een van de beschikbare duur: in 1 jaar, in 2 jaar of nooit verloopt.
Selecteer Toevoegen. De gegenereerde waarde wordt weergegeven.
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 ClientID
is dit hetzelfde als Application ID
of AppId
.
Open het project in uw IDE.
Open het bestand ./src/main/resources/authentication.properties .
Zoek de
aad.clientId
eigenschap en vervang de bestaande waarde door de toepassings-id ofclientId
dems-identity-b2c-java-servlet-webapp-authentication
toepassing vanuit Azure Portal.Zoek de
aad.secret
eigenschap en vervang de bestaande waarde door de waarde die u hebt opgeslagen tijdens het maken van dems-identity-b2c-java-servlet-webapp-authentication
toepassing vanuit Azure Portal.Zoek de
aad.scopes
eigenschap en vervang de bestaande clientId van de toepassing door de waarde die u in stap 1 van deze sectie hebt geplaatstaad.clientId
.Zoek de
aad.authority
eigenschap en vervang het eerste exemplaar doorfabrikamb2c
de naam van de Azure AD B2C-tenant waarin u dems-identity-b2c-java-servlet-webapp-authentication
toepassing hebt gemaakt in Azure Portal.Zoek de
aad.authority
eigenschap en vervang het tweede exemplaar doorfabrikamb2c
de naam van de Azure AD B2C-tenant waarin u dems-identity-b2c-java-servlet-webapp-authentication
toepassing hebt gemaakt in Azure Portal.Zoek de
aad.signInPolicy
eigenschap en vervang deze door de naam van het gebruikersstroombeleid voor registratie/aanmelding dat u hebt gemaakt in de Azure AD B2C-tenant waarin u dems-identity-b2c-java-servlet-webapp-authentication
toepassing hebt gemaakt in Azure Portal.Zoek de
aad.passwordResetPolicy
eigenschap en vervang deze door de naam van het gebruikersstroombeleid voor wachtwoordherstel dat u hebt gemaakt in de Azure AD B2C-tenant waarin u dems-identity-b2c-java-servlet-webapp-authentication
toepassing hebt gemaakt in Azure Portal.Zoek de
aad.editProfilePolicy
eigenschap en vervang deze door de naam van het gebruikersstroombeleid voor het bewerkingsprofiel dat u hebt gemaakt in de Azure AD B2C-tenant waarin u dems-identity-b2c-java-servlet-webapp-authentication
toepassing hebt gemaakt in Azure Portal.
Bouw het sample
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 WebLogic hebt geïnstalleerd en een serverdomein hebt ingesteld.
Voordat u naar WebLogic 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:
Zoek in het voorbeeld het bestand application.properties of authentication.properties waar u de client-id, tenant, omleidings-URL enzovoort hebt geconfigureerd.
Wijzig in dit bestand verwijzingen naar
localhost:8080
oflocalhost:8443
naar de URL en poort waarop WebLogic wordt uitgevoerd, wat standaard moet zijnlocalhost:7001
.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.
Gebruik de volgende stappen om het voorbeeld te implementeren in WebLogic via de webconsole:
Start de WebLogic-server met behulp van DOMAIN_NAME\bin\startWebLogic.cmd.
Navigeer naar de WebLogic-webconsole in uw browser op
http://localhost:7001/console
.Ga naar Implementaties van domeinstructuur > , selecteer Installeren, selecteer Uw bestanden uploaden en zoek vervolgens het WAR-bestand dat u hebt gemaakt met behulp van Maven.
Selecteer Deze implementatie installeren als een toepassing, selecteer Volgende, Voltooien en selecteer Opslaan.
De meeste standaardinstellingen moeten prima zijn, behalve dat u de toepassing een naam moet geven die overeenkomt met de omleidings-URI die u hebt ingesteld in de voorbeeldconfiguratie of registratie van Azure-apps. Als de omleidings-URI is
http://localhost:7001/msal4j-servlet-auth
, moet u de toepassingmsal4j-servlet-auth
een naam opgeven.Ga terug naar Implementaties van domeinstructuur> en start uw toepassing.
Nadat de toepassing is gestart, gaat u naar
http://localhost:7001/<application-name>/
en moet u toegang hebben tot de toepassing.
Het voorbeeld verkennen
Gebruik de volgende stappen om het voorbeeld te verkennen:
- U ziet dat de status van de aangemelde of afgemelde status wordt weergegeven in het midden van het scherm.
- Selecteer de contextgevoelige knop in de hoek. Met deze knop wordt Aanmelden gelezen wanneer u de app voor het eerst uitvoert.
- Volg op de volgende pagina de instructies en meld u aan met een account van uw gekozen id-provider.
- U ziet dat de contextgevoelige knop nu afmeldt en uw gebruikersnaam weergeeft.
- Selecteer Details van id-token om enkele van de gedecodeerde claims van het id-token weer te geven.
- U hebt ook de mogelijkheid om uw profiel te bewerken. Selecteer de koppeling om details te bewerken, zoals uw weergavenaam, woonplaats en beroep.
- Gebruik de knop in de hoek om u af te melden.
- Nadat u zich hebt afgetekend, gaat u naar de volgende URL voor de pagina met tokendetails:
http://localhost:8080/ms-identity-b2c-java-servlet-webapp-authentication/auth_token_details
. Hier kunt u zien hoe in de app een401: unauthorized
fout wordt weergegeven in plaats van de id-tokenclaims.
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 eigenschappenlezer en logboekregistratie. |
authentication.properties | Configuratie van Microsoft Entra-id en -programma. |
AuthenticationFilter.java | Leidt niet-geverifieerde aanvragen om naar beveiligde resources naar een 401-pagina. |
MsalAuthSession | Geïnstantieerd met een HttpSession . 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 ConfidentialClientApplication
wordt een exemplaar gemaakt in het AuthHelper.java-bestand , zoals wordt weergegeven in het volgende voorbeeld. 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-instantie is samengevoegd met de juiste
UserFlowPolicy
instantie voor registratie, aanmelding, profielbewerking of wachtwoordherstel.
In dit voorbeeld worden deze waarden gelezen uit het bestand authentication.properties met behulp van een eigenschappenlezer in het bestand Config.java .
Stapsgewijze procedure
De volgende stappen bieden een overzicht van de functionaliteit van de app:
De eerste stap van het aanmeldingsproces is het verzenden van een aanvraag naar het
/authorize
eindpunt voor uw Azure Active Directory B2C-tenant. Het MSAL4J-exemplaarConfidentialClientApplication
wordt gebruikt om een AUTORISATIEaanvraag-URL samen te stellen en de app leidt de browser om naar deze URL, zoals wordt weergegeven in het volgende voorbeeld: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:
AuthorizationRequestUrlParameters
: Parameters die moeten worden ingesteld om een AuthorizationRequestUrl te bouwen.REDIRECT_URI
: Waarbij Azure AD B2C de browser omleidt, samen met de verificatiecode, na het verzamelen van de gebruikersreferenties.SCOPES
: Bereiken zijn machtigingen die door de toepassing worden aangevraagd.Normaal gesproken zouden de drie bereiken
openid profile offline_access
voldoende zijn voor het ontvangen van een id-tokenantwoord. MSAL4J vereist echter dat alle antwoorden van Azure AD B2C ook een toegangstoken bevatten.Als u wilt dat Azure AD B2C een toegangstoken en een id-token displiceren, moet de aanvraag een extra resourcebereik 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 bereiken die door de app zijn aangevraagd in het bestand authentication.properties .
ResponseMode.QUERY
: Azure AD B2C kan het antwoord retourneren als formulierparameters in een HTTP POST-aanvraag of als queryreeksparams in een HTTP GET-aanvraag.Prompt.SELECT_ACCOUNT
: Azure AD B2C moet de gebruiker vragen om het account te selecteren waarmee ze zich willen verifiëren.state
: Een unieke variabele die door de app is ingesteld in de sessie op elke tokenaanvraag en vernietigd na ontvangst van de bijbehorende callback van Azure AD B2C-omleiding. De statusvariabele zorgt ervoor dat Azure AD B2C-aanvragen voor de/auth_redirect endpoint
aanvraag daadwerkelijk afkomstig zijn van Azure AD B2C-autorisatieaanvragen die afkomstig zijn van deze app en deze sessie, waardoor CSRF-aanvallen worden voorkomen. Dit wordt gedaan in het bestand AADRedirectServlet.java .nonce
: Een unieke variabele die door de app is ingesteld in de sessie op elke tokenaanvraag en vernietigd na ontvangst van het bijbehorende token. Deze nonce wordt getranscribeerd naar de resulterende tokens dispensed Azure AD B2C, waardoor er geen token-replay-aanval optreedt.
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.
Het
ConfidentialClientApplication
exemplaar wisselt vervolgens deze autorisatiecode uit voor een id-token en toegangstoken van Azure Active Directory B2C, zoals wordt weergegeven in het volgende voorbeeld: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:
AuthorizationCodeParameters
: Parameters die moeten worden ingesteld om de autorisatiecode voor een id en/of toegangstoken uit te wisselen.authCode
: De autorisatiecode die is ontvangen op het omleidingseindpunt.REDIRECT_URI
: De omleidings-URI die in de vorige stap is gebruikt, moet opnieuw worden doorgegeven.SCOPES
: De bereiken die in de vorige stap worden gebruikt, moeten opnieuw worden doorgegeven.
Als
acquireToken
dit lukt, worden de tokenclaims geëxtraheerd en wordt de nonce-claim gevalideerd op basis van de niet-ce die in de sessie is opgeslagen, zoals wordt weergegeven in het volgende voorbeeld:parseJWTClaimsSetAndStoreResultInSession(msalAuth, result, serializedTokenCache); validateNonce(msalAuth) processSuccessfulAuthentication(msalAuth);
Als de niet-validatie is geslaagd, wordt de verificatiestatus in een sessie aan de serverzijde geplaatst, waarbij gebruik wordt gemaakt van methoden die door de
MsalAuthSession
klasse worden weergegeven, zoals wordt 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 best practices voor Azure Active Directory B2C
- Azure AD B2C-sessie
- Microsoft Authentication Library (MSAL) voor Java
Zie Verificatiescenario's voor Microsoft Entra-id voor meer informatie over de werking van OAuth 2.0-protocollen in dit scenario en andere scenario's.
Volgende stap
Java WebLogic-apps implementeren in WebLogic op azure Virtual Machines