Dela via


Aktivera Java WebSphere-appar för att logga in användare och få åtkomst till Microsoft Graph

Den här artikeln visar en Java WebSphere-app som loggar in användare och hämtar en åtkomsttoken för att anropa Microsoft Graph. Den använder Microsoft Authentication Library (MSAL) för Java.

Följande diagram visar appens topologi:

Diagram som visar appens topologi.

Klientappen använder MSAL för Java (MSAL4J) för att logga in en användare och hämta en åtkomsttoken för Microsoft Graph från Microsoft Entra-ID. Åtkomsttoken visar att användaren har behörighet att komma åt Microsoft Graph API-slutpunkten enligt definitionen i omfånget.

Förutsättningar

  • Java 8 eller senare
  • Maven 3
  • En Microsoft Entra-ID-klientorganisation. Mer information finns i Hämta en Microsoft Entra-ID-klientorganisation.
  • Ett användarkonto i din egen Microsoft Entra-ID-klientorganisation om du bara vill arbeta med konton i din organisationskatalog – det vill sa i läget för en enda klientorganisation. Om du inte har skapat ett användarkonto i klientorganisationen än bör du göra det innan du fortsätter. Mer information finns i Skapa, bjuda in och ta bort användare.
  • Ett användarkonto i en organisations Microsoft Entra-ID-klientorganisation om du vill arbeta med konton i en organisationskatalog , det vill s. v.s. i multitenantläge. Det här exemplet måste ändras för att fungera med ett personligt Microsoft-konto. Om du inte har skapat ett användarkonto i klientorganisationen än bör du göra det innan du fortsätter. Mer information finns i Skapa, bjuda in och ta bort användare.
  • Ett personligt Microsoft-konto – till exempel Xbox, Hotmail, Live och så vidare – om du vill arbeta med personliga Microsoft-konton.

Rekommendationer

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/2-Authorization-I/call-graph

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 Microsoft Entra ID-klientorganisation

Det finns ett projekt i det här exemplet. Följande avsnitt visar hur du registrerar appen med hjälp av Azure Portal.

Välj den Microsoft Entra-ID-klientorganisation där du vill skapa dina program

Använd följande steg för att välja klientorganisation:

  1. Logga in på Azure-portalen.

  2. Om ditt konto finns i mer än en Microsoft Entra-ID-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 Microsoft Entra ID-klientorganisation.

Registrera appen (java-servlet-webapp-call-graph)

Registrera först en ny app i Azure Portal genom att följa anvisningarna i Snabbstart: Registrera ett program med Microsofts identitetsplattform.

Använd sedan följande steg för att slutföra registreringen:

  1. Gå till sidan Microsofts identitetsplattform för utvecklare Appregistreringar.

  2. Välj Ny registrering.

  3. 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 java-servlet-webapp-call-graph.

    • Under Kontotyper som stöds väljer du något av följande alternativ:

      • Välj Endast Konton i den här organisationskatalogen om du skapar ett program som endast ska användas av användare i din klientorganisation, det vill s.v.s. ett program med en enda klientorganisation .
      • Välj Konton i en organisationskatalog om du vill att användare i en Microsoft Entra-ID-klientorganisation ska kunna använda ditt program , det vill s.v.s. ett program med flera klienter.
      • Välj Konton i en organisationskatalog och personliga Microsoft-konton för den bredaste uppsättningen kunder , det vill: ett program med flera klientorganisationer som också stöder Microsofts personliga konton.
    • Välj Personliga Microsoft-konton som endast ska användas av användare av personliga Microsoft-konton – till exempel Hotmail-, Live-, Skype- och Xbox-konton.

    • I avsnittet Omdirigerings-URI väljer du Webb i kombinationsrutan och anger följande omdirigerings-URI: http://localhost:8080/msal4j-servlet-graph/auth/redirect.

  4. Välj Registrera för att skapa programmet.

  5. 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.

  6. Välj Spara för att spara dina ändringar.

  7. 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.

  8. Under avsnittet Klienthemlighet välj Ny klienthemlighet.

  9. Skriv en beskrivning – till exempel apphemlighet.

  10. Välj en av de tillgängliga varaktigheterna: Om ett år, Om två år eller Aldrig upphör att gälla.

  11. Markera Lägga till. Det genererade värdet visas.

  12. 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.

  13. På appens registreringssida väljer du API-behörigheter i navigeringsfönstret för att öppna sidan för att lägga till åtkomst till de API:er som ditt program behöver.

  14. Välj Lägg till behörigheter.

  15. Kontrollera att fliken Microsoft-API:er är markerad.

  16. I avsnittet Vanliga Microsoft-API:er väljer du Microsoft Graph.

  17. I avsnittet Delegerade behörigheter väljer du User.Read i listan. Använd sökrutan om det behövs.

  18. Välj Lägg till behörigheter.


Konfigurera appen (java-servlet-webapp-call-graph) 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.

  1. Öppna projektet i din IDE.

  2. Öppna filen ./src/main/resources/authentication.properties.

  3. Leta reda på strängen {enter-your-tenant-id-here}. Ersätt det befintliga värdet med något av följande värden:

    • Ditt Klient-ID för Microsoft Entra om du har registrerat din app med alternativet Endast konton i den här organisationskatalogen .
    • organizations Ordet om du har registrerat din app med alternativet Konton i en organisationskatalog.
    • common Ordet om du har registrerat din app med alternativet Konton i en organisationskatalog och personliga Microsoft-konton.
    • Ordet consumers om du har registrerat din app med alternativet Personliga Microsoft-konton .
  4. Leta upp strängen {enter-your-client-id-here} och ersätt det befintliga värdet med program-ID:t eller clientId programmet java-servlet-webapp-call-graph som kopierats från Azure Portal.

  5. Leta reda på strängen {enter-your-client-secret-here} och ersätt det befintliga värdet med det värde som du sparade när appen skapades java-servlet-webapp-call-graph 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

Dessa instruktioner förutsätter att du har installerat WebSphere och konfigurerat en server. Du kan använda vägledningen i Distribuera WebSphere Application Server-kluster (traditionell) på Azure Virtual Machines för en grundläggande serverkonfiguration.

Innan du kan distribuera till WebSphere använder du följande steg för att göra några konfigurationsändringar i själva exemplet och sedan skapa eller återskapa paketet:

  1. Gå till appens authentication.properties-fil och ändra värdet app.homePage för till din server-URL och portnummer som du planerar att använda, som du ser i följande exempel:

    # 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. När du har sparat den här filen använder du följande kommando för att återskapa din app:

    mvn clean package
    
  3. När koden har skapats kopierar du .war-filen till målserverns filsystem.

Du måste också göra samma ändring i Azure-appregistreringen, där du anger den i Azure Portal som omdirigerings-URI-värdetfliken Autentisering.

  1. Gå till sidan Microsofts identitetsplattform för utvecklare Appregistreringar.

  2. Använd sökrutan för att söka efter din appregistrering – till exempel java-servlet-webapp-authentication.

  3. Öppna appregistreringen genom att välja dess namn.

  4. Markera Autentisering på kommandomenyn.

  5. I avsnittet Omdirigerings-URI:er för webben - väljer du Lägg till URI.

  6. Fyll i URI:n för din app och lägg till /auth/redirect – till exempel https://<server-url>:<port-number>/auth/redirect.

  7. Välj Spara.

Använd följande steg för att distribuera exemplet med hjälp av WebSpheres integrerade lösningskonsol:

  1. På fliken Program väljer du Nytt program och sedan Nytt företagsprogram.

  2. Välj den .war-fil som du skapade och välj sedan Nästa tills du kommer till installationssteget Mappa kontextrötter för webbmoduler . De andra standardinställningarna bör vara bra.

  3. För kontextroten anger du samma värde som efter portnumret i omdirigerings-URI:n som du angav i exempelkonfigurationen/Azure-appregistreringen. Om omdirigerings-URI:n är http://<server-url>:9080/msal4j-servlet-auth/ska kontextroten alltså vara msal4j-servlet-auth.

  4. Välj Slutför.

  5. När programmet har installerats går du till avsnittet WebSphere-företagsprogramfliken Program .

  6. Välj den .war-fil som du installerade i listan över program och välj sedan Starta för att distribuera.

  7. När distributionen är klar går du till http://<server-url>:9080/{whatever you set as the context root} och du bör kunna se programmet.

Utforska exemplet

Använd följande steg för att utforska exemplet:

  1. Observera den inloggade eller utloggade statusen som visas i mitten av skärmen.
  2. 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.
  3. På nästa sida följer du anvisningarna och loggar in med ett konto i Microsoft Entra ID-klientorganisationen.
  4. Observera de omfång som begärs på medgivandeskärmen.
  5. Observera att den sammanhangskänsliga knappen nu säger Logga ut och visar ditt användarnamn.
  6. Välj ID-tokeninformation för att se några av ID-tokens avkodade anspråk.
  7. Välj Samtalsdiagram för att ringa ett anrop till Microsoft Graphs /me-slutpunkt och se ett urval av användarinformationen som erhålls.
  8. Använd knappen i hörnet för att logga ut.

Om koden

Det här exemplet använder MSAL för Java (MSAL4J) för att logga in en användare och hämta en token för Microsoft Graph API. Den använder Microsoft Graph SDK för Java för att hämta data från Graph. Du måste lägga till dessa bibliotek i dina projekt med hjälp av Maven.

Om du vill replikera det här exemplets beteende kan du kopiera pom.xml-filen och innehållet i hjälpmapparna och authservlets-mapparna i mappen src/main/java/com/microsoft/azuresamples/msal4j. Du behöver också filen authentication.properties . Dessa klasser och filer innehåller allmän kod som du kan använda i en mängd olika program. Du kan också kopiera resten av exemplet, men de andra klasserna och filerna skapas specifikt för att hantera det här exemplets mål.

Innehåll

I följande tabell visas innehållet i exempelprojektmappen:

Fil/mapp beskrivning
src/main/java/com/microsoft/azuresamples/msal4j/callgraphwebapp/ Den här katalogen innehåller de klasser som definierar appens affärslogik för serverdelen.
src/main/java/com/microsoft/azuresamples/msal4j/authservlets/ Den här katalogen innehåller de klasser som används för inloggning och utloggningsslutpunkter.
____Servlet.java Alla tillgängliga slutpunkter definieras i .java klasser som slutar i ____Servlet.java.
src/main/java/com/microsoft/azuresamples/msal4j/helpers/ Hjälpklasser för autentisering.
AuthenticationFilter.java Omdirigerar oautentiserade begäranden till skyddade slutpunkter till en 401-sida.
src/main/resources/authentication.properties Microsoft Entra-ID och programkonfiguration.
src/main/webapp/ Den här katalogen innehåller användargränssnittet – JSP-mallar
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 till att skapa Auktoriserings-URL:en för Microsoft Entra-ID och hjälper även till att byta ut autentiseringstoken mot en åtkomsttoken.

// getConfidentialClientInstance method
IClientSecret secret = ClientCredentialFactory.createFromSecret(SECRET);
confClientInstance = ConfidentialClientApplication
                     .builder(CLIENT_ID, secret)
                     .authority(AUTHORITY)
                     .build();

Följande parametrar används för instansiering:

  • Appens klient-ID.
  • Klienthemligheten, som är ett krav för konfidentiella klientprogram.
  • Microsoft Entra ID-utfärdare, som innehåller ditt Klient-ID för Microsoft Entra.

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:

  1. Det första steget i inloggningsprocessen är att skicka en begäran till /authorize slutpunkten på för din Microsoft Entra-ID-klientorganisation. MSAL4J-instansen ConfidentialClientApplication används för att skapa en URL för auktoriseringsbegäran. Appen omdirigerar webbläsaren till den här URL:en, där användaren loggar in.

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

    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 Microsoft Entra-ID omdirigerar webbläsaren – tillsammans med autentiseringskoden – efter att användarens autentiseringsuppgifter har samlats in. Den måste matcha omdirigerings-URI:n i Microsoft Entra ID-appregistreringen i Azure Portal
    • 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.
      • En fullständig lista över omfång som begärs av appen finns i filen authentication.properties . Du kan lägga till fler omfång, till exempel User.Read.
  2. Användaren får en inloggningsprompt av Microsoft Entra-ID. 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.

  3. Instansen ConfidentialClientApplication utbyter sedan den här auktoriseringskoden mot en ID-token och åtkomsttoken från 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();
    

    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.
  4. Om acquireToken det lyckas extraheras tokenanspråken. Om nonce-kontrollen godkänns placeras resultatet i context – en instans av IdentityContextData – och sparas i sessionen. Programmet kan sedan instansiera IdentityContextData från sessionen genom en instans av IdentityContextAdapterServlet när det behöver åtkomst till den, som visas i följande kod:

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

Skydda vägarna

Information om hur exempelappen filtrerar åtkomst till vägar finns i AuthenticationFilter.java. I filen app.protect.authenticated authentication.properties innehåller egenskapen de kommaavgränsade vägar som endast autentiserade användare kan komma åt, enligt följande exempel:

# 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

Anropsdiagram

När användaren navigerar till /call_graphskapar programmet en instans av IGraphServiceClient - från Java Graph SDK - som skickar vidare den inloggade användarens åtkomsttoken. Graph-klienten placerar åtkomsttoken i sidhuvudena Authorization för sina begäranden. Appen ber sedan Graph-klienten att anropa /me slutpunkten för att ge information om den inloggade användaren.

Om du redan har en giltig åtkomsttoken för Graph Service med omfånget User.Read behöver du bara följande kod för att få åtkomst till /me slutpunkten:

//CallGraphServlet.java
User user = GraphHelper.getGraphClient(contextAdapter).me().buildRequest().get();

Omfattningar

Omfång anger för Microsoft Entra-ID vilken åtkomstnivå programmet begär.

Baserat på de begärda omfången presenterar Microsoft Entra-ID en medgivandedialog för användaren vid inloggning. Om användaren samtycker till ett eller flera omfång och hämtar en token kodas scopes-consented-to till i den resulterande access_token.

De omfång som begärs av programmet finns i authentication.properties. Som standard anger programmet omfångsvärdet till User.Read. Det här specifika Microsoft Graph API-omfånget är för åtkomst till informationen för den aktuella inloggade användaren. Grafslutpunkten för åtkomst till den här informationen är https://graph.microsoft.com/v1.0/me. Alla giltiga begäranden som görs till den här slutpunkten måste innehålla ett access_token som innehåller omfånget User.Read Authorization i huvudet.

Mer information

Gå vidare

Distribuera Java WebSphere-appar till traditionell websfär på virtuella Azure-datorer