Povolení přihlašování pro aplikace Java Tomcat pomocí ID Microsoft Entra

Tento článek popisuje aplikaci Java pro Tomcat, která uživatelům umožňuje přihlásit se do vašeho tenanta Microsoft Entra ID pomocí knihovny Identity a ověřování Microsoftu (MSAL) for Java.

Následující diagram znázorňuje topologii aplikace:

Diagram znázorňující topologii aplikace.

Klientská aplikace používá MSAL pro Javu (MSAL4J) k přihlašování uživatelů do vlastního tenantu Microsoft Entra ID a k získání tokenu ID od Microsoft Entra ID. ID token potvrzuje, že uživatel je ověřen v rámci tohoto tenanta. Aplikace chrání své trasy podle stavu ověřování uživatele.

Požadavky

  • JDK verze 8 nebo vyšší
  • Maven 3
  • Tenant služby Microsoft Entra ID. Další informace najdete v článku Jak získat tenant Microsoft Entra ID.
  • Uživatelský účet ve vlastním tenantovi Microsoft Entra ID, pokud chcete pracovat pouze s účty v adresáři vaší organizace – tedy v režimu jednoho tenanta (single-tenant). Pokud jste v tenantovi Microsoft Entra ID nevytvořili uživatelský účet, měli byste to udělat, než budete pokračovat. Další informace najdete v článku Jak vytvořit, pozvat a odstranit uživatele.
  • Uživatelský účet v tenantovi Microsoft Entra ID některé organizace, pokud chcete pracovat s účty v adresáři libovolné organizace – tedy v režimu více tenantů. Tuto ukázku musíte upravit, aby fungovala s osobním účtem Microsoft. Pokud jste ještě ve svém tenantovi Microsoft Entra ID nevytvořili uživatelský účet, měli byste to udělat předtím, než budete pokračovat. Další informace najdete v článku Jak vytvořit, pozvat a odstranit uživatele.
  • Osobní účet Microsoft – například Xbox, Hotmail, Live atd., pokud chcete pracovat s osobními účty Microsoft.
  • Tomcat 9
  • Visual Studio Code
  • Azure Tools for Visual Studio Code

Doporučení

  • Určitá znalost Javy / Jakarta Servlets.
  • Znalost terminálu Linux/OSX
  • jwt.ms pro kontrolu vašich tokenů.
  • Fiddler pro monitorování vaší síťové aktivity a odstraňování problémů.
  • Sledujte blog Microsoft Entra , abyste zůstali up-to-datem s nejnovějším vývojem.

Nastavení ukázky

Následující části ukazují, jak nastavit ukázkovou aplikaci.

Klonování nebo stažení ukázkového úložiště

Pokud chcete ukázku naklonovat, otevřete okno Bash a použijte následující příkaz:

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

Případně přejděte do repozitáře ms-identity-msal-java-samples, potom jej stáhněte jako soubor .zip a rozbalte ho na pevný disk.

Důležité

Abyste se vyhnuli omezením délky cesty k souboru ve Windows, naklonujte nebo extrahujte úložiště do adresáře poblíž kořenového adresáře pevného disku.

Zaregistrujte ukázkovou aplikaci ve vašem tenantovi Microsoft Entra ID

V této ukázce je jeden projekt. V této části se dozvíte, jak aplikaci zaregistrovat.

Nejprve zaregistrujte aplikaci v portálu Azure podle pokynů v Rychlý start: Registrace aplikace na platformě Microsoft identity.

Potom pomocí následujících kroků dokončete registraci:

  1. Přejděte na stránku Registrace aplikací na webu Microsoft Identity Platform pro vývojáře.

  2. Vyberte Nová registrace.

  3. Na zobrazené stránce Zaregistrovat aplikaci zadejte následující informace pro registraci aplikace:

    • V části Název zadejte smysluplný název aplikace, který se bude zobrazovat uživatelům aplikace – například .

    • V části Podporované typy účtů vyberte jednu z následujících možností:

      • Vyberte Pouze účty v tomto organizačním adresáři, pokud vytváříte aplikaci jen pro uživatele ve vašem tenantu – tedy jednotenantní aplikaci.
      • Vyberte Účty v libovolném organizačním adresáři, pokud chcete, aby uživatelé v libovolném tenantu Microsoft Entra ID mohli používat vaši aplikaci – tedy vícetenantní aplikaci.
      • Vyberte Účty v libovolném organizačním adresáři a osobní účty Microsoft pro nejširší okruh zákazníků – tedy víceklientskou aplikaci, která podporuje také osobní účty Microsoft.
      • Vyberte osobní účty Microsoft, které budou používat jenom uživatelé osobních účtů Microsoft – například účty Hotmail, Live, Skype a Xbox.
    • V části Identifikátor URI pro přesměrování vyberte v rozevíracím seznamu možnost Web a zadejte následující identifikátor URI pro přesměrování: .

  4. Výběrem možnosti Registrovat aplikaci vytvořte.

  5. Na stránce registrace aplikace vyhledejte a zkopírujte hodnotu ID aplikace (klienta), kterou chcete použít později. Tuto hodnotu použijete v konfiguračním souboru nebo souborech vaší aplikace.

  6. Na registrační stránce aplikace vyberte v navigačním podokně certifikáty a tajné kódy a otevřete stránku pro generování tajných kódů a nahrání certifikátů.

  7. V části Tajné klíče klienta vyberte Nový tajný klíč klienta.

  8. Zadejte popis – například tajný kód aplikace.

  9. Vyberte vypršení platnosti tajného kódu nebo zadejte vlastní životnost. Tajné kódy klientů jsou omezené na maximální životnost 24 měsíců a Microsoft doporučuje vypršení platnosti kratší než 12 měsíců. U produkčních aplikací upřednostňujete přihlašovací údaje certifikátu nebo federované identity před tajným klíčem klienta.

  10. Vyberte Přidat. Zobrazí se vygenerovaná hodnota.

  11. Zkopírujte a uložte vygenerovanou hodnotu pro použití v dalších krocích. Tuto hodnotu potřebujete pro konfigurační soubory kódu. Tato hodnota se znovu nezobrazí a nemůžete ji načíst žádným jiným způsobem. Před přechodem na jinou obrazovku nebo podokno si ho proto nezapomeňte uložit z webu Azure Portal.


Nakonfigurujte aplikaci tak, aby používala vaši registraci aplikace.

Ke konfiguraci aplikace použijte následující postup:

Poznámka:

V následujících krocích je stejné jako nebo .

  1. Otevřete projekt v integrovaném vývojovém prostředí (IDE).

  2. Otevřete soubor ./src/main/resources/authentication.properties.

  3. Vyhledejte řetězec . Nahraďte existující hodnotu jednou z následujících hodnot:

    • ID vašeho tenanta Microsoft Entra ID, pokud jste aplikaci zaregistrovali pomocí možnosti Účty pouze v tomto organizačním adresáři.
    • Slovo , pokud jste aplikaci zaregistrovali pomocí možnosti Účty v libovolném organizačním adresáři.
    • Slovo , pokud jste aplikaci zaregistrovali pomocí možnosti Účty v libovolném organizačním adresáři a osobní účty Microsoft.
    • Slovo , pokud jste aplikaci zaregistrovali pomocí možnosti osobní účty Microsoft.
  4. Vyhledejte řetězec a nahraďte stávající hodnotu ID aplikace nebo aplikace , zkopírovanými z portálu Azure.

  5. Najděte řetězec a nahraďte stávající hodnotu hodnotou, kterou jste si uložili při vytváření aplikace na portálu Azure.

Sestavte ukázku

Pokud chcete vytvořit ukázku pomocí Mavenu, přejděte do adresáře obsahujícího soubor pom.xml ukázky a spusťte následující příkaz:

mvn clean package

Tento příkaz vygeneruje soubor .war , který můžete spustit na různých aplikačních serverech.

Spusťte ukázku

  • Nasazení do služby Azure App Service
  • Spustit místně

Následující části ukazují, jak nasadit ukázku do služby Aplikace Azure Service.

Požadavky

  • Modul plug-inu Maven pro aplikace Azure App Service

    Pokud maven není vaším upřednostňovaným nástrojem pro vývoj, projděte si následující podobné kurzy, které používají jiné nástroje:

    • IntelliJ IDEA
    • Eclipse
    • Visual Studio Code

Konfigurace modulu plug-in Maven

Když nasadíte do služby Aplikace Azure Service, nasazení automaticky použije vaše přihlašovací údaje Azure z Azure CLI. Pokud se Azure CLI nenainstaluje místně, pak se modul plug-in Maven ověří pomocí OAuth nebo přihlášení zařízení. Další informace najdete v článku autentizace pomocí modulů plug-in Maven.

Ke konfiguraci modulu plug-in použijte následující postup:

  1. Spuštěním následujícího příkazu nakonfigurujte nasazení. Tento příkaz vám pomůže nastavit operační systém Aplikace Azure Service, verzi Javy a verzi Tomcat.

    mvn com.microsoft.azure:azure-webapp-maven-plugin:2.13.0:config
    
  2. Pro Vytvořit novou konfiguraci spuštění stiskněte Y a potom Enter.

  3. Pro definování hodnoty pro operační systém stiskněte 1 pro Windows nebo 2 pro Linux a pak stiskněte Enter.

  4. U možnosti Define value for javaVersion stiskněte 2 pro Javu 11 a potom stiskněte Enter.

  5. U možnosti Define value for webContainer stiskněte 4 pro Tomcat 9.0 a potom stiskněte Enter.

  6. Pokud chcete definovat hodnotu pro pricingTier, stiskněte Enter a vyberte výchozí úroveň P1v2 .

  7. Pro možnost Potvrdit stiskněte Y a poté stiskněte Enter.

Následující příklad ukazuje výstup procesu nasazení:

Please confirm webapp properties
AppName : msal4j-servlet-auth-1707209552268
ResourceGroup : msal4j-servlet-auth-1707209552268-rg
Region : centralus
PricingTier : P1v2
OS : Linux
Java Version: Java 11
Web server stack: Tomcat 9.0
Deploy to slot : false
Confirm (Y/N) [Y]: [INFO] Saving configuration to pom.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  37.112 s
[INFO] Finished at: 2024-02-06T08:53:02Z
[INFO] ------------------------------------------------------------------------

Jakmile potvrdíte své volby, plugin přidá do souboru pom.xml vašeho projektu požadovaný prvek pluginu a nastavení potřebná ke konfiguraci aplikace pro spuštění ve službě Azure App Service.

Relevantní část souboru pom.xml by měla vypadat podobně jako v následujícím příkladu:

<build>
    <plugins>
        <plugin>
            <groupId>com.microsoft.azure</groupId>
            <artifactId>>azure-webapp-maven-plugin</artifactId>
            <version>x.xx.x</version>
            <configuration>
                <schemaVersion>v2</schemaVersion>
                <resourceGroup>your-resourcegroup-name</resourceGroup>
                <appName>your-app-name</appName>
            ...
            </configuration>
        </plugin>
    </plugins>
</build>

Můžete přímo v souboru pom.xml upravit konfigurace pro App Service. Některé běžné konfigurace jsou uvedeny v následující tabulce:

Vlastnost Požadováno Popis
subscriptionId false (nepravda) ID předplatného.
resourceGroup true Skupina prostředků Azure pro vaši aplikaci.
appName true Název aplikace.
region false (nepravda) Oblast, ve které se má aplikace hostovat. Výchozí hodnota je . Podporované oblasti najdete v části Podporované oblasti.
pricingTier false (nepravda) Cenová úroveň vaší aplikace. Výchozí hodnota je pro produkční zatížení. Doporučená minimální hodnota pro vývoj a testování v jazyce Java je . Další informace najdete v tématu Ceny služby App Service.
runtime false (nepravda) Konfigurace prostředí runtime. Další informace najdete v části Podrobnosti konfigurace.
deployment false (nepravda) Konfigurace nasazení. Další informace najdete v části Podrobnosti konfigurace.

Úplný seznam konfigurací najdete v referenční dokumentaci k modulu plug-in. Všechny moduly plug-in Azure Maven sdílejí společnou sadu konfigurací. Pro tyto konfigurace viz Běžné konfigurace. Konfigurace specifické pro Azure App Service najdete v tématu Aplikace Azure: Podrobnosti o konfiguraci.

Nezapomeňte si pro pozdější použití poznamenat hodnoty a .

Příprava aplikace na nasazení

Když nasadíte aplikaci do služby App Service, adresa URL pro přesměrování se změní na adresu URL pro přesměrování vaší nasazené instance aplikace. Pomocí následujícího postupu změňte tato nastavení v souboru vlastností:

  1. Přejděte k souboru authentication.properties své aplikace a změňte hodnotu na doménové jméno nasazené aplikace, jak je znázorněno v následujícím příkladu. Pokud jste například v předchozím kroku zvolili jako název aplikace , musíte nyní použít jako hodnotu pro . Ujistěte se, že jste také změnili protokol z na .

    # 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://<your-app-name>.azurewebsites.net
    
  2. Po uložení tohoto souboru pomocí následujícího příkazu znovu sestavte aplikaci:

    mvn clean package
    

Důležité

V tomtéž souboru authentication.properties máte nastavení pro . Není vhodné tuto hodnotu nasadit do služby App Service. Ani to není vhodné nechat tuto hodnotu v kódu a potenciálně ji odeslat do úložiště Git. Pokud chcete tuto tajnou hodnotu odebrat z kódu, podrobnější pokyny najdete v části Nasazení do služby App Service – Odebrání tajného údaje. Tyto pokyny přidávají další kroky pro uložení hodnoty tajného údaje do Key Vaultu a pro použití referencí na Key Vault.

Aktualizace registrace aplikace Microsoft Entra ID

Protože se identifikátor URI přesměrování změní na vaši aplikaci nasazenou do Azure App Service, musíte také změnit identifikátor URI přesměrování v registraci aplikace v Microsoft Entra ID. K provedení této změny použijte následující postup:

  1. Přejděte na stránku Registrace aplikací na webu Microsoft Identity Platform pro vývojáře.

  2. Použijte vyhledávací pole k vyhledání registrace vaší aplikace – například .

  3. Výběrem jejího názvu otevřete registraci aplikace.

  4. Vyberte Ověřování z nabídky.

  5. V části WebIdentifikátory URI pro přesměrování vyberte možnost Přidat identifikátor URI.

  6. Zadejte identifikátor URI své aplikace a připojte k němu – například .

  7. Zvolte Uložit.

Nasazení aplikace

Teď jste připraveni nasadit aplikaci do služby Aplikace Azure Service. Pomocí následujícího příkazu se ujistěte, že jste přihlášení ke svému prostředí Azure a spusťte nasazení:

az login

S veškerou konfigurací připravenou v souboru pom.xml teď můžete pomocí následujícího příkazu nasadit aplikaci v Javě do Azure:

mvn package azure-webapp:deploy

Po dokončení nasazení je vaše aplikace připravena na adrese . Otevřete adresu URL v lokálním webovém prohlížeči, kde byste měli vidět úvodní stránku aplikace .

Prozkoumejte ukázku

Ukázku můžete prozkoumat pomocí následujících kroků:

  1. Všimněte si stavu přihlášení nebo odhlášení, který se zobrazuje uprostřed obrazovky.
  2. Vyberte tlačítko citlivé na kontext v rohu. Toto tlačítko zobrazuje při prvním spuštění aplikace text Přihlásit se.
  3. Na další stránce postupujte podle pokynů a přihlaste se pomocí účtu v tenantovi Microsoft Entra ID.
  4. Na obrazovce souhlasu si všimněte požadovaných oborů.
  5. Všimněte si, že kontextové tlačítko nyní zobrazuje Odhlásit se a vaše uživatelské jméno.
  6. Vyberte Podrobnosti tokenu ID, chcete-li zobrazit některé dekódované deklarované údaje tokenu ID.
  7. Pomocí tlačítka v rohu se odhlaste.
  8. Po odhlášení vyberte možnost ID Token Details a ověřte, že aplikace zobrazí chybu místo claimů tokenu ID, když uživatel není autorizován.

O kódu

Tato ukázka ukazuje, jak pomocí knihovny MSAL pro Javu (MSAL4J) přihlásit uživatele do vašeho tenanta Microsoft Entra ID. Pokud chcete použít MSAL4J ve vlastních aplikacích, musíte ho přidat do svých projektů pomocí Mavenu.

Pokud chcete napodobit chování této ukázky, můžete zkopírovat soubor pom.xml a obsah složek helpers a authservlets ve složce src/main/java/com/microsoft/azuresamples/msal4j. Také potřebujete soubor authentication.properties. Tyto třídy a soubory obsahují obecný kód, který můžete použít v široké škále aplikací. Zbývající část ukázky můžete také zkopírovat, ale ostatní třídy a soubory jsou vytvořené speciálně tak, aby řešily cíl této ukázky.

Obsah

Následující tabulka ukazuje obsah složky ukázkového projektu:

Soubor nebo složka Popis
src/main/java/com/microsoft/azuresamples/msal4j/authwebapp/ Tento adresář obsahuje třídy definující back-endovou obchodní logiku aplikace.
src/main/java/com/microsoft/azuresamples/msal4j/authservlets/ Tento adresář obsahuje třídy, které se používají k přihlášení a odhlášení koncových bodů.
*Servlet.java Všechny dostupné koncové body jsou definovány ve třídách Javy s názvy končícími Servlet.
src/main/java/com/microsoft/azuresamples/msal4j/helpers/ Pomocné třídy pro autentizaci.
AuthenticationFilter.java Přesměruje neověřené požadavky na chráněné koncové body na stránku 401.
src/main/resources/authentication.properties Microsoft Entra ID a konfigurace programu.
src/main/webapp/ Tento adresář obsahuje uživatelské rozhraní – šablony JSP.
CHANGELOG.md Seznam změn v ukázce
CONTRIBUTING.md Pokyny pro přispívání do ukázky
LICENCE Licence pro ukázku.

ConfidentialClientApplication

instance je vytvořena v souboru AuthHelper.java, jak ukazuje následující příklad. Tento objekt pomáhá vytvořit autorizační adresu URL microsoft Entra ID a také pomáhá vyměnit ověřovací token pro přístupový token.

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

Pro vytvoření instance se používají následující parametry:

  • ID klienta aplikace.
  • Tajný klíč klienta, což je požadavek na důvěrné klientské aplikace.
  • Autorita Microsoft Entra ID, která zahrnuje ID vašeho tenanta Microsoft Entra ID.

V této ukázce se tyto hodnoty čtou ze souboru authentication.properties pomocí čtečky vlastností v souboru Config.java .

Ukázka krok za krokem

Následující kroky poskytují návod k funkcím aplikace:

  1. Prvním krokem procesu přihlašování je odeslání požadavku na koncový bod pro vašeho tenanta Microsoft Entra ID. Instance MSAL4J se používá k vytvoření adresy URL žádosti o autorizaci. Aplikace přesměruje prohlížeč na tuto adresu URL, což je místo, kde se uživatel přihlásí.

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

    Následující seznam popisuje funkce tohoto kódu:

    • : Parametry, které musí být nastaveny k sestavení AuthorizationRequestUrl.

    • : Adresa, na kterou Microsoft Entra ID po zadání přihlašovacích údajů uživatelem přesměruje prohlížeč spolu s autorizačním kódem. Musí odpovídat identifikátoru URI pro přesměrování v registraci aplikace Microsoft Entra ID v Azure portal.

    • : Rozsahy jsou oprávnění, o která aplikace žádá. Obvykle tři rozsahy postačují k získání odpovědi obsahující token ID.

      Úplný seznam rozsahů, které aplikace požaduje, najdete v souboru authentication.properties. Můžete přidat další oprávnění, například .

  2. Uživateli se zobrazí výzva k přihlášení pomocí ID Microsoft Entra. Pokud je pokus o přihlášení úspěšný, prohlížeč uživatele se přesměruje do koncového bodu přesměrování aplikace. Platný požadavek na tento koncový bod obsahuje autorizační kód.

  3. Tato instance pak vymění tento autorizační kód za token ID a přístupový token od 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();
    

    Následující seznam popisuje funkce tohoto kódu:

    • : Parametry, které musí být nastaveny, aby bylo možné vyměnit autorizační kód za token ID a/nebo přístupový token.
    • : Autorizační kód, který byl přijat v koncovém bodu přesměrování.
    • : URI přesměrování použité v předchozím kroku musí být znovu předáno.
    • : Rozsahy oprávnění použité v předchozím kroku musí být znovu předány.
  4. Pokud je operace úspěšná, extrahují se atributy tokenu. Pokud kontrola nonce proběhne úspěšně, výsledky se umístí do , instance , a uloží do relace. Aplikace pak může z relace prostřednictvím instance vytvořit instanci , kdykoli k ní potřebuje přístup, jak ukazuje následující kód:

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

Ochrana tras

Informace o tom, jak ukázková aplikace filtruje přístup k trasám, najdete v tématu AuthenticationFilter.java. V souboru authentication.properties obsahuje vlastnost čárkami oddělené trasy, ke kterým mají přístup pouze ověření uživatelé, jak ukazuje následující příklad:

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

Oblasti

Obory oprávnění určují v Microsoft Entra ID úroveň přístupu, o kterou aplikace žádá.

V závislosti na požadovaných oborech zobrazí ID Microsoft Entra dialog pro vyjádření souhlasu uživateli při přihlášení. Pokud uživatel udělí souhlas s jednou nebo více oblastmi oprávnění a získá token, oblasti oprávnění, s nimiž byl udělen souhlas, jsou zakódovány do výsledného .

Požadovaná oprávnění aplikace najdete v souboru authentication.properties. Tyto tři rozsahy oprávnění jsou ve výchozím nastavení požadovány knihovnou MSAL a udělovány službou Microsoft Entra ID.

Více informací

  • Identity a ověřování Microsoftu (MSAL) pro jazyk Java
  • Referenční dokumentace k MSAL pro Javu
  • Microsoft identity platform (Microsoft Entra ID pro vývojáře)
  • Rychlý start: Registrace aplikace na platformě Microsoft Identity
  • Vysvětlení možností udělení souhlasu aplikacím v Microsoft Entra ID
  • Princip fungování souhlasu uživatele a správce
  • Ukázky kódu MSAL