Java WebLogic-apps inschakelen om gebruikers aan te melden en toegang te krijgen tot Microsoft Graph
In dit artikel wordt een Java WebLogic-app gedemonstreert die gebruikers aanmeldt en een toegangstoken verkrijgt voor het aanroepen van Microsoft Graph. Het maakt gebruik van de Microsoft Authentication Library (MSAL) voor Java.
In het volgende diagram ziet u de topologie van de app:
Diagram met de topologie van de app.
De client-app gebruikt MSAL voor Java (MSAL4J) om een gebruiker aan te melden en een toegangstoken voor Microsoft Graph op te halen via Microsoft Entra-id. Het toegangstoken bewijst dat de gebruiker gemachtigd is om toegang te krijgen tot het Microsoft Graph API-eindpunt, zoals gedefinieerd in het bereik.
Vereisten
- Java 8 of hoger
- Maven 3
- Een Microsoft Entra ID-tenant. Zie Een Microsoft Entra ID-tenant ophalen voor meer informatie.
- Een gebruikersaccount in uw eigen Microsoft Entra ID-tenant als u alleen met accounts in uw organisatiedirectory wilt werken, dat wil zeggen in de modus voor één tenant. Als u nog geen gebruikersaccount in uw tenant hebt gemaakt, moet u dit doen voordat u doorgaat. Zie Gebruikers maken, uitnodigen en verwijderen voor meer informatie.
- Een gebruikersaccount in de Microsoft Entra ID-tenant van een organisatie als u wilt werken met accounts in een organisatiedirectory, dat wil weten in de modus voor meerdere tenants. Dit voorbeeld moet worden gewijzigd om te kunnen werken met een persoonlijk Microsoft-account. Als u nog geen gebruikersaccount in uw tenant hebt gemaakt, moet u dit doen voordat u doorgaat. Zie Gebruikers maken, uitnodigen en verwijderen voor meer informatie.
- Een persoonlijk Microsoft-account, bijvoorbeeld Xbox, Hotmail, Live, enzovoort, als u wilt werken met persoonlijke Microsoft-accounts.
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/2-Authorization-I/call-graph
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 Microsoft Entra ID-tenant
Er is één project in dit voorbeeld. In de volgende secties ziet u hoe u de app registreert met behulp van Azure Portal.
Kies de Microsoft Entra ID-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 Microsoft Entra ID-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 Microsoft Entra ID-tenant.
De app registreren (java-servlet-webapp-call-graph)
Registreer eerst een nieuwe app in Azure Portal door de instructies in quickstart te volgen: Een toepassing registreren bij het Microsoft Identity Platform.
Gebruik vervolgens de volgende stappen om de registratie te voltooien:
Ga naar de pagina App-registraties in het Microsoft identity platform voor ontwikkelaars.
Selecteer 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,
java-servlet-webapp-call-graph
bijvoorbeeld.Selecteer onder Ondersteunde accounttypen een van de volgende opties:
- Selecteer Alleen accounts in deze organisatiemap als u een toepassing bouwt voor alleen gebruik door gebruikers in uw tenant, dat wil gezegd een toepassing met één tenant.
- Selecteer Accounts in een organisatiemap als u wilt dat gebruikers in een Microsoft Entra ID-tenant uw toepassing kunnen gebruiken, dat wil gezegd een multitenant-toepassing .
- Selecteer Accounts in elke organisatiedirectory en persoonlijke Microsoft-accounts voor de breedste set klanten, dat wil gezegd een multitenant-toepassing die ook persoonlijke Microsoft-accounts ondersteunt.
Selecteer Persoonlijke Microsoft-accounts voor alleen gebruik door gebruikers van persoonlijke Microsoft-accounts, bijvoorbeeld Hotmail-, Live-, Skype- en Xbox-accounts.
Selecteer in de sectie Omleidings-URI het web in de keuzelijst met invoervak en voer de volgende omleidings-URI in:
http://localhost:8080/msal4j-servlet-graph/auth/redirect
.
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.
Selecteer op de registratiepagina van de app API-machtigingen in het navigatiedeelvenster om de pagina te openen om toegang te krijgen tot de API's die uw toepassing nodig heeft.
Selecteer Machtigingen toevoegen.
Zorg ervoor dat het tabblad Microsoft-API's is geselecteerd.
Selecteer in de sectie Veelgebruikte Microsoft-API's de optie Microsoft Graph.
Selecteer User.Read in de lijst in de sectie Gedelegeerde machtigingen. Gebruik het zoekvak indien nodig.
Selecteer Machtigingen toevoegen.
De app (java-servlet-webapp-call-graph) 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 tekenreeks
{enter-your-tenant-id-here}
. Vervang de bestaande waarde door een van de volgende waarden:- Uw Tenant-id voor Microsoft Entra ID als u uw app hebt geregistreerd bij de accounts in deze organisatiemap, kunt u alleen kiezen.
- Het woord
organizations
als u uw app hebt geregistreerd bij de accounts in een organisatiemapoptie . - Het woord
common
als u uw app hebt geregistreerd bij de accounts in een organisatiemap en de optie persoonlijke Microsoft-accounts . - Het woord
consumers
als u uw app hebt geregistreerd bij de optie Persoonlijke Microsoft-accounts .
Zoek de tekenreeks
{enter-your-client-id-here}
en vervang de bestaande waarde door de toepassings-id ofclientId
dejava-servlet-webapp-call-graph
toepassing die is gekopieerd uit Azure Portal.Zoek de tekenreeks
{enter-your-client-secret-here}
en vervang de bestaande waarde door de waarde die u hebt opgeslagen tijdens het maken van dejava-servlet-webapp-call-graph
app 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.
Het voorbeeld implementeren
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 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 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 in de Microsoft Entra ID-tenant.
- In het toestemmingsscherm ziet u de bereiken die worden aangevraagd.
- 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.
- Selecteer Call Graph om een aanroep uit te voeren naar het /me-eindpunt van Microsoft Graph en bekijk een selectie van de gebruikersgegevens die zijn verkregen.
- Gebruik de knop in de hoek om u af te melden.
Over de code
In dit voorbeeld wordt MSAL voor Java (MSAL4J) gebruikt om een gebruiker aan te melden en een token te verkrijgen voor Microsoft Graph API. Microsoft Graph SDK voor Java wordt gebruikt om gegevens van Graph te verkrijgen. U moet deze bibliotheken toevoegen aan uw projecten met behulp van Maven.
Als u het gedrag van dit voorbeeld wilt repliceren, kunt u het pom.xml-bestand en de inhoud van de helpers en authservlets-mappen kopiëren in de map src/main/java/com/microsoft/azuresamples/msal4j . U hebt ook het bestand authentication.properties nodig. Deze klassen en bestanden bevatten algemene code die u kunt gebruiken in een breed scala aan toepassingen. U kunt ook de rest van het voorbeeld kopiëren, maar de andere klassen en bestanden zijn specifiek gebouwd om het doel van dit voorbeeld te verhelpen.
Inhoud
In de volgende tabel ziet u de inhoud van de voorbeeldprojectmap:
Bestand/map | Beschrijving |
---|---|
src/main/java/com/microsoft/azuresamples/msal4j/callgraphwebapp/ | Deze map bevat de klassen die de bedrijfslogica van de back-end van de app definiëren. |
src/main/java/com/microsoft/azuresamples/msal4j/authservlets/ | Deze map bevat de klassen die worden gebruikt voor aanmeldings- en afmeldingseindpunten. |
*Servlet.java | Alle beschikbare eindpunten worden gedefinieerd in Java-klassen met namen die eindigen op Servlet . |
src/main/java/com/microsoft/azuresamples/msal4j/helpers/ | Helperklassen voor verificatie. |
AuthenticationFilter.java | Leidt niet-geverifieerde aanvragen om naar beveiligde eindpunten naar een 401-pagina. |
src/main/resources/authentication.properties | Configuratie van Microsoft Entra-id en -programma. |
src/main/webapp/ | Deze map bevat de gebruikersinterface - JSP-sjablonen |
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 autorisatie-URL van Microsoft Entra ID en helpt ook bij het uitwisselen van het verificatietoken voor een toegangstoken.
// getConfidentialClientInstance method
IClientSecret secret = ClientCredentialFactory.createFromSecret(SECRET);
confClientInstance = ConfidentialClientApplication
.builder(CLIENT_ID, secret)
.authority(AUTHORITY)
.build();
De volgende parameters worden gebruikt voor instantiëring:
- De client-id van de app.
- Het clientgeheim, dat vereist is voor Vertrouwelijke clienttoepassingen.
- De Microsoft Entra-id-instantie, die uw Microsoft Entra-tenant-id bevat.
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 Microsoft Entra ID-tenant. Het MSAL4J-exemplaarConfidentialClientApplication
wordt gebruikt om een AUTORISATIEaanvraag-URL samen te stellen. De app leidt de browser om naar deze URL, waar de gebruiker zich aanmeldt.final ConfidentialClientApplication client = getConfidentialClientInstance(); AuthorizationRequestUrlParameters parameters = AuthorizationRequestUrlParameters.builder(Config.REDIRECT_URI, Collections.singleton(Config.SCOPES)) .responseMode(ResponseMode.QUERY).prompt(Prompt.SELECT_ACCOUNT).state(state).nonce(nonce).build(); final String authorizeUrl = client.getAuthorizationRequestUrl(parameters).toString(); contextAdapter.redirectUser(authorizeUrl);
In de volgende lijst worden de functies van deze code beschreven:
AuthorizationRequestUrlParameters
: Parameters die moeten worden ingesteld om eenAuthorizationRequestUrl
.REDIRECT_URI
: Waar Microsoft Entra ID de browser omleidt, samen met de verificatiecode, na het verzamelen van gebruikersreferenties. Deze moet overeenkomen met de omleidings-URI in de registratie van de Microsoft Entra ID-app in Azure PortalSCOPES
: Bereiken zijn machtigingen die door de toepassing worden aangevraagd.- Normaal gesproken volstaan
openid profile offline_access
de drie bereiken voor het ontvangen van een id-tokenantwoord. - De volledige lijst met bereiken die door de app zijn aangevraagd, vindt u in het bestand authentication.properties . U kunt meer bereiken toevoegen, zoals
User.Read
.
- Normaal gesproken volstaan
De gebruiker krijgt een aanmeldingsprompt van Microsoft Entra ID. 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 deze autorisatiecode vervolgens uit voor een id-token en toegangstoken van Microsoft Entra ID.// First, validate the state, then parse any error codes in response, then extract the authCode. Then: // build the auth code params: final AuthorizationCodeParameters authParams = AuthorizationCodeParameters .builder(authCode, new URI(Config.REDIRECT_URI)).scopes(Collections.singleton(Config.SCOPES)).build(); // Get a client instance and leverage it to acquire the token: final ConfidentialClientApplication client = AuthHelper.getConfidentialClientInstance(); final IAuthenticationResult result = client.acquireToken(authParams).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. Als de nonce-controle is geslaagd, worden de resultaten geplaatst incontext
- een exemplaar vanIdentityContextData
- en opgeslagen in de sessie. De toepassing kan de sessie vervolgens instantiërenIdentityContextData
via een exemplaar vanIdentityContextAdapterServlet
wanneer deze toegang nodig heeft, zoals wordt weergegeven in de volgende code:// parse IdToken claims from the IAuthenticationResult: // (the next step - validateNonce - requires parsed claims) context.setIdTokenClaims(result.idToken()); // if nonce is invalid, stop immediately! this could be a token replay! // if validation fails, throws exception and cancels auth: validateNonce(context); // set user to authenticated: context.setAuthResult(result, client.tokenCache().serialize());
De routes beveiligen
Zie AuthenticationFilter.java voor informatie over hoe de voorbeeld-app de toegang tot routes filtert. In het bestand authentication.properties bevat de app.protect.authenticated
eigenschap de door komma's gescheiden routes waartoe alleen geverifieerde gebruikers toegang hebben, zoals wordt weergegeven in het volgende voorbeeld:
# for example, /token_details requires any user to be signed in and does not require special roles or groups claim(s)
app.protect.authenticated=/token_details, /call_graph
Oproepgrafiek
Wanneer de gebruiker naartoe /call_graph
navigeert, maakt de toepassing een exemplaar van de IGraphServiceClient
- vanuit de Java Graph SDK - waarbij het toegangstoken van de aangemelde gebruiker wordt doorgegeven. De Graph-client plaatst het toegangstoken in de headers van de Authorization
aanvragen. De app vraagt vervolgens de Graph-client om het /me
eindpunt aan te roepen om details voor de momenteel aangemelde gebruiker op te geven.
Als u al een geldig toegangstoken voor Graph Service met het User.Read
bereik hebt, hebt u alleen de volgende code nodig om toegang te krijgen tot het /me
eindpunt:
//CallGraphServlet.java
User user = GraphHelper.getGraphClient(contextAdapter).me().buildRequest().get();
Bereiken
Bereiken vertellen Microsoft Entra ID het toegangsniveau dat de toepassing aanvraagt.
Op basis van de aangevraagde bereiken geeft Microsoft Entra ID een toestemmingsdialoog aan de gebruiker bij het aanmelden. Als de gebruiker toestemming verleent voor een of meer bereiken en een token verkrijgt, worden de bereiken waarvoor toestemming is gegeven, gecodeerd in het resulterende access_token
bereik.
Zie authentication.properties voor de bereiken die door de toepassing zijn aangevraagd. Standaard stelt de toepassing de waarde voor bereiken in op User.Read
. Dit specifieke Microsoft Graph API-bereik is bedoeld voor toegang tot de informatie van de huidige aangemelde gebruiker. Het grafiekeindpunt voor toegang tot deze informatie is https://graph.microsoft.com/v1.0/me
. Alle geldige aanvragen die naar dit eindpunt worden gedaan, moeten een access_token
aanvraag bevatten die het bereik User.Read
in de Authorization
header bevat.
Meer informatie
- Microsoft Authentication Library (MSAL) voor Java
- Microsoft Identity Platform (Microsoft Entra ID voor ontwikkelaars)
- Snelstart: Een toepassing registreren op het Microsoft-identiteitsplatform
- Informatie over toestemmingservaringen voor Microsoft Entra ID-toepassingen
- Toestemming van gebruiker en beheerder
- MSAL-codevoorbeelden
Volgende stap
Java WebLogic-apps implementeren in WebLogic op azure Virtual Machines