Aktivera inloggning för Java WebSphere-appar med hjälp av Microsoft Entra-ID

Det här exemplet visar en Java WebSphere-app som loggar in användare i din Microsoft Entra ID-klientorganisation med hjälp av Microsofts autentiseringsbibliotek (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 användare i sin egen klientorganisation i Microsoft Entra ID och hämta en ID-token från Microsoft Entra ID. ID-tokenen visar att en användare är autentiserad i den här klientorganisationen. Appen skyddar sina vägar enligt användarens autentiseringsstatus.

Förutsättningar

  • JDK version 8 eller senare
  • Maven 3
  • En Microsoft Entra-ID-klientorganisation. Mer information finns i Så här skaffar du 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 din Microsoft Entra ID-klientorganisation bör du göra det innan du fortsätter. Mer information finns i Så här skapar du, bjuder in och tar bort användare.
  • Ett användarkonto i Microsoft Entra-ID-klienten för valfri organisation om du vill arbeta med konton i valfri organisationskatalog – det vill säga i läge för flera klienter. Du måste ändra det här exemplet så att det fungerar med ett personligt Microsoft-konto. Om du inte har skapat ett användarkonto i din Microsoft Entra-ID-klientorganisation ännu bör du göra det innan du fortsätter. Mer information finns i Så här skapar du, bjuder in och tar bort användare.
  • Ett personligt Microsoft-konto – till exempel Xbox, Hotmail, Live och så vidare – om du vill arbeta med personliga Microsoft-konton.
  • WebSphere
  • Visual Studio Code
  • Azure Tools för Visual Studio Code

Rekommendationer

  • Viss kännedom om Java / Jakarta Servlets.
  • Viss kunskap om Linux/OSX-terminalen.
  • jwt.ms för att granska dina token.
  • Fiddler för att övervaka nätverksaktivitet och felsöka.
  • Följ Microsoft Entra-bloggen för att hålla dig up-to-date 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

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. Det här avsnittet visar hur du registrerar appen.

Registrera först appen i Azure-portalen genom att följa instruktionerna i Snabbstart: Registrera ett program med Microsofts identitetsplattform.

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

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

  2. Välj Ny registrering.

  3. På sidan Registrera ett program som visas anger du följande information för programregistreringen:

    • I avsnittet Namn anger du ett beskrivande namn på appen som visas för appens användare – till exempel .

    • 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 en applikation som endast ska användas av användare i din klientorganisation – det vill säga en applikation med en enda klientorganisation.
      • Välj Konton i valfri organisationskatalog om du vill att användare i valfri Microsoft Entra ID-klientorganisation ska kunna använda din applikation – det vill säga en applikation för flera klientorganisationer.
      • Välj Konton i valfri organisationskatalog och personliga Microsoft-konton för det bredaste kundunderlaget – det vill säga ett program för flera klientorganisationer som också stöder personliga Microsoft-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 Web i kombinationsrutan och anger följande omdirigerings-URI: .

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

  5. På appens registreringssida letar du reda på och kopierar värdet för Program-ID (klient) som du ska använda senare. Du använder det här värdet i appens konfigurationsfil eller filer.

  6. På appens registreringssida väljer du Certifikat och hemligheter i navigeringsfönstret för att öppna sidan för att generera hemligheter och ladda upp certifikat.

  7. Under avsnittet Klienthemlighet välj Ny klienthemlighet.

  8. Skriv en beskrivning – till exempel apphemlighet.

  9. Välj en förfallotid för hemligheten eller ange en anpassad livslängd. Klienthemligheter är begränsade till en maximal livslängd på 24 månader och Microsoft rekommenderar ett utgångsdatum på mindre än 12 månader. För produktionsappar föredrar du ett certifikat eller federerade identitetsautentiseringsuppgifter framför en klienthemlighet.

  10. Välj Lägg till. Det genererade värdet visas.

  11. 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 så att den använder din appregistrering

Använd följande steg för att konfigurera appen:

Kommentar

I följande steg är samma som eller .

  1. Öppna projektet i din IDE.

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

  3. Hitta strängen . Ersätt det befintliga värdet med något av följande värden:

    • Ditt klientorganisations-ID för Microsoft Entra ID om du registrerade din app med alternativet Endast konton i den här organisationskatalogen.
    • Ordet om du har registrerat din app med alternativet Konton i valfri organisationskatalog.
    • Ordet om du registrerade appen med alternativet Konton i valfri organisationskatalog och personliga Microsoft-konton.
    • Ordet om du har registrerat din app med alternativet personliga Microsoft-konton.
  4. Leta upp strängen och ersätt det befintliga värdet med program-ID:t eller för programmet som kopierats från Azure-portalen.

  5. Leta reda på strängen och ersätt det befintliga värdet med det värde som du sparade när du skapade appen i Azure-portalen.

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å virtuella Azure-datorer 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 för till serverns URL och portnumret som du tänker använda, enligt 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 för Microsofts identitetsplattform för utvecklare App registrations.

  2. Använd sökrutan för att hitta din appregistrering - till exempel .

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

  4. Markera Autentisering på kommandomenyn.

  5. I avsnittet WebbOmdirigerings-URI:er väljer du Lägg till URI.

  6. Fyll i appens URI och lägg till /auth/redirect – till exempel .

  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 kontextrot 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. Det vill säga, om omdirigerings-URI:n är , bör kontextroten vara .

  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 har slutförts går du till och bör kunna se applikationen.

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. På samtyckesskärmen, observera vilka behörigheter som begärs.
  5. Observera att den sammanhangskänsliga knappen nu säger Logga ut och visar ditt användarnamn.
  6. Välj Information om ID-token om du vill se några av ID-tokenens avkodade anspråk.
  7. Använd knappen i hörnet för att logga ut.
  8. När du har loggat ut väljer du ID-tokeninformation för att se att appen visar ett -fel i stället för ID-tokenanspråken när användaren inte är behörig.

Om koden

Det här exemplet visar hur du använder MSAL för Java (MSAL4J) för att logga in användare i din Microsoft Entra ID-klientorganisation. Om du vill använda MSAL4J i dina egna program måste du lägga till det i dina projekt med 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/authwebapp/ 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 med namn som slutar Servlet.
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 Licens för exemplet.

ConfidentialClientApplication

En -instans skapas i filen AuthHelper.java, som visas 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-auktoriteten, som innehåller ditt klientorganisations-ID för Microsoft Entra ID.

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 slutpunkten för din Microsoft Entra ID-klientorganisation. MSAL4J-instansen används för att konstruera en URL för en 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:

    • : Parametrar som måste ställas in för att bygga en AuthorizationRequestUrl.

    • : Dit Microsoft Entra ID omdirigerar webbläsaren – tillsammans med auktoriseringskoden – när användarens autentiseringsuppgifter har samlats in. Den här måste matcha den omdirigerings-URI som anges i appregistreringen för Microsoft Entra ID i Azure portal.

    • : Scopes är behörigheter som begärs av applikationen. Normalt räcker de tre omfattningarna för att få ett ID-token som svar.

      Du hittar en fullständig lista över omfång som begärs av appen i filen authentication.properties . Du kan lägga till fler scope, till exempel .

  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 byter sedan ut 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:

    • : Parametrar som måste anges för att kunna byta ut auktoriseringskoden mot ett ID-token och/eller en åtkomsttoken.
    • : Auktoriseringskoden som togs emot vid omdirigeringsslutpunkten.
    • : omdirigerings-URI:n som användes i föregående steg måste anges igen.
    • : De scope som användes i föregående steg måste skickas med igen.
  4. Om lyckas extraheras anspråken i tokenen. Om nonce-kontrollen klaras placeras resultatet i – en instans av – och sparas i sessionen. Applikationen kan sedan instansiera från sessionen med hjälp av en instans av när den behöver komma åt det, så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 authentication.properties innehåller egenskapen de kommaavgränsade sökvägar som endast autentiserade användare kan komma åt, vilket visas i följande exempel:

# for example, /token_details requires any user to be signed in and does not require special roles claim(s)
app.protect.authenticated=/token_details

Omfång

Behörighetsomfång anger för Microsoft Entra ID vilken åtkomstnivå som 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 en eller flera omfattningar och erhåller en token kodas de omfattningar som användaren har samtyckt till in i den resulterande .

För de omfattningar som begärs av applikationen, se authentication.properties. Dessa tre omfång begärs av MSAL och anges av Microsoft Entra-ID som standard.

Mer information

  • Microsofts autentiseringsbibliotek (MSAL) för Java
  • MSAL Java-referensdokumentation
  • Microsoft Identity Platform (Microsoft Entra ID för utvecklare)
  • Snabbstart: Registrera en applikation med Microsofts identitetsplattform
  • Förstå samtyckesupplevelser för Microsoft Entra ID-applikationer
  • Förstå användar- och administratörsmedgivande
  • MSAL-kodexempel

Gå vidare

Distribuera Java WebSphere-applikationer till Traditional WebSphere på Azure Virtual Machines