Sdílet prostřednictvím


Povolení aplikací Java WebSphere pro přihlášení uživatelů a přístup k Microsoft Graphu

Tento článek ukazuje aplikaci Java WebSphere, která přihlásí uživatele a získá přístupový token pro volání Microsoft Graphu. Používá knihovnu MICROSOFT Authentication Library (MSAL) pro Javu.

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řihlášení uživatele a získání přístupového tokenu pro Microsoft Graph z Microsoft Entra ID. Přístupový token potvrzuje, že uživatel má oprávnění pro přístup ke koncovému bodu rozhraní Microsoft Graph API, jak je definováno v oboru.

Požadavky

  • Java 8 nebo vyšší
  • Maven 3
  • Tenant Microsoft Entra ID. Další informace naleznete v tématu Získání tenanta Microsoft Entra ID.
  • Uživatelský účet ve vašem vlastním tenantovi Microsoft Entra ID, pokud chcete pracovat jenom s účty v adresáři organizace – to znamená v režimu jednoho tenanta. Pokud jste ještě ve svém tenantovi nevytvořili uživatelský účet, měli byste to udělat předtím, než budete pokračovat. Další informace najdete v tématu Vytváření, pozvání a odstraňování uživatelů.
  • Uživatelský účet v tenantovi Microsoft Entra ID libovolné organizace, pokud chcete pracovat s účty v libovolném organizačním adresáři – to znamená v režimu s více tenanty. Tato ukázka musí být upravena tak, aby fungovala s osobním účtem Microsoft. Pokud jste ještě ve svém tenantovi nevytvořili uživatelský účet, měli byste to udělat předtím, než budete pokračovat. Další informace najdete v tématu Vytváření, pozvání a odstraňování uživatelů.
  • Osobní účet Microsoft – například Xbox, Hotmail, Live atd., pokud chcete pracovat s osobními účty Microsoft.

Doporučení

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

Případně přejděte do úložiště ms-identity-msal-java-samples , stáhněte si ho jako .zip soubor a extrahujte 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.

Registrace ukázkové aplikace v tenantovi Microsoft Entra ID

V této ukázce je jeden projekt. V následujících částech se dozvíte, jak aplikaci zaregistrovat pomocí webu Azure Portal.

Zvolte tenanta Microsoft Entra ID, ve kterém chcete vytvářet aplikace.

Pokud chcete zvolit tenanta, postupujte následovně:

  1. Přihlaste se k portálu Azure.

  2. Pokud je váš účet ve více než jednom tenantovi Microsoft Entra ID, vyberte svůj profil v rohu webu Azure Portal a pak vyberte Přepnout adresář a změňte relaci na požadovaného tenanta Microsoft Entra ID.

Registrace aplikace (java-servlet-webapp-call-graph)

Nejprve zaregistrujte novou aplikaci na webu Azure Portal podle pokynů v rychlém startu: Registrace aplikace na platformě Microsoft Identity Platform.

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

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

  2. Vyberte Nová registrace.

  3. Na stránce Zaregistrovat aplikaci, která se zobrazí, zadejte následující informace o registraci aplikace:

    • V části Název zadejte smysluplný název aplikace pro zobrazení uživatelům aplikace , java-servlet-webapp-call-graphnapříklad .

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

      • V tomto organizačním adresáři vyberte Účty jenom v případě, že vytváříte aplikaci pro použití pouze uživateli ve vašem tenantovi – to znamená aplikace s jedním tenantem .
      • Vyberte Účty v libovolném organizačním adresáři , pokud chcete, aby uživatelé v libovolném tenantovi Microsoft Entra ID mohli vaši aplikaci používat – to znamená víceklientských aplikací.
      • Vyberte Účty v libovolném organizačním adresáři a osobních účtech Microsoft pro nejširší sadu zákazníků – to znamená víceklientských aplikací, 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 přesměrování vyberte v poli se seznamem web a zadejte následující identifikátor URI přesměrování: http://localhost:8080/msal4j-servlet-graph/auth/redirect.

  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. Výběrem možnosti Uložit uložte změny.

  7. Na registrační stránce aplikace vyberte v navigačním podokně certifikáty a tajné kódy a otevřete stránku, kde můžete vygenerovat tajné kódy a nahrát certifikáty.

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

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

  10. Vyberte jednu z dostupných dob trvání: Za 1 rok, Za 2 roky nebo Nikdy nevyprší platnost.

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

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

  13. Na registrační stránce aplikace vyberte v navigačním podokně oprávnění rozhraní API a otevřete stránku a přidejte přístup k rozhraním API, která vaše aplikace potřebuje.

  14. Vyberte Přidat oprávnění.

  15. Ujistěte se, že je vybraná karta Rozhraní API Microsoftu.

  16. V části Běžně používané rozhraní MICROSOFT API vyberte Microsoft Graph.

  17. V části Delegovaná oprávnění vyberte v seznamu User.Read. V případě potřeby použijte vyhledávací pole.

  18. Vyberte Přidat oprávnění.


Konfigurace aplikace (java-servlet-webapp-call-graph) pro použití registrace aplikace

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

Poznámka:

V následujících krocích ClientID je stejný jako Application ID nebo AppId.

  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 {enter-your-tenant-id-here}. Nahraďte existující hodnotu jednou z následujících hodnot:

    • ID tenanta Microsoft Entra ID, pokud jste aplikaci zaregistrovali jenom s účty v tomto organizačním adresáři .
    • Slovo organizations , pokud jste aplikaci zaregistrovali u účtů v libovolné možnosti adresáře organizace.
    • Slovo common , pokud jste aplikaci zaregistrovali pomocí účtů v libovolném organizačním adresáři a osobních účtech Microsoft.
    • Slovo consumers , pokud jste aplikaci zaregistrovali pomocí možnosti Osobní účty Microsoft
  4. Vyhledejte řetězec {enter-your-client-id-here} a nahraďte existující hodnotu ID aplikace nebo clientId java-servlet-webapp-call-graph aplikace zkopírovanou z webu Azure Portal.

  5. Najděte řetězec {enter-your-client-secret-here} a nahraďte existující hodnotu hodnotou, kterou jste uložili při vytváření java-servlet-webapp-call-graph aplikace, na webu Azure Portal.

Sestavení ukázky

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.

Spuštění ukázky

Tyto pokyny předpokládají, že jste nainstalovali WebSphere a nastavili server. Pokyny najdete v tématu Nasazení aplikačního serveru WebSphere (tradičního) clusteru ve službě Azure Virtual Machines pro základní nastavení serveru.

Před nasazením do WebSphere proveďte některé změny konfigurace v samotné ukázce pomocí následujících kroků a pak sestavte nebo znovu sestavte balíček:

  1. Přejděte do souboru authentication.properties vaší aplikace a změňte hodnotu app.homePage na adresu URL serveru a číslo portu, které chcete použít, jak je znázorněno v následujícím příkladu:

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

    mvn clean package
    
  3. Po dokončení sestavování kódu zkopírujte soubor .war do systému souborů cílového serveru.

Musíte také provést stejnou změnu v registraci aplikace Azure, kde jste ji nastavili na webu Azure Portal jako hodnotu identifikátoru URI přesměrování na kartě Ověřování .

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

  2. Pomocívyhledávacího java-servlet-webapp-authentication

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

  4. Zvolte Ověřování z nabídky příkazů.

  5. V části Identifikátory URI pro přesměrování webu - vyberte Přidat identifikátor URI.

  6. Vyplňte identifikátor URI aplikace, připojte /auth/redirecthttps://<server-url>:<port-number>/auth/redirectnapříklad .

  7. Zvolte Uložit.

Pomocí následujících kroků nasaďte ukázku pomocí konzoly integrovaných řešení WebSphere:

  1. Na kartě Aplikace vyberte Nová aplikace a pak Nová podniková aplikace.

  2. Zvolte soubor .war, který jste vytvořili, a pak vyberte Další, dokud se nedostanete ke kořenovému kontextu mapy pro krok instalace webových modulů. Ostatní výchozí nastavení by měla být v pořádku.

  3. Pro kořen kontextu ho nastavte na stejnou hodnotu jako za číslem portu v identifikátoru URI přesměrování, který jste nastavili v ukázkové konfiguraci nebo registraci aplikace Azure. To znamená, že pokud je http://<server-url>:9080/msal4j-servlet-auth/identifikátor URI přesměrování , pak by měl být msal4j-servlet-authkontextový kořen .

  4. Vyberte Dokončit.

  5. Po dokončení instalace aplikace přejděte do části Podnikové aplikace WebSphere na kartě Aplikace .

  6. V seznamu aplikací vyberte soubor .war, který jste nainstalovali, a pak vyberte Spustit a nasaďte.

  7. Po dokončení nasazení přejděte na http://<server-url>:9080/{whatever you set as the context root} aplikaci a měli byste ji vidět.

Zkoumání ukázky

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 přečte přihlášení při prvním spuštění aplikace.
  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 se teď zobrazuje odhlásit a zobrazit vaše uživatelské jméno.
  6. Výběrem podrobností o tokenu ID zobrazíte některé dekódované deklarace identity tokenu ID.
  7. Výběrem možnosti Volat Graph provedete volání koncového bodu /me v Microsoft Graphu a zobrazí se výběr získaných podrobností o uživateli.
  8. Pomocí tlačítka v rohu se odhlaste.

O kódu

Tato ukázka používá MSAL pro Javu (MSAL4J) k přihlášení uživatele a získání tokenu pro rozhraní Microsoft Graph API. K získání dat z Graphu používá sadu Microsoft Graph SDK pro Javu . Tyto knihovny musíte přidat do svých projektů pomocí Mavenu.

Pokud chcete replikovat chování této ukázky, můžete zkopírovat soubor pom.xml a obsah pomocných rutin a složek authservlets ve složce src/main/java/com/microsoft/azuresamples/msal4j. Potřebujete také 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/callgraphwebapp/ 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 .java končících ____Servlet.java.
src/main/java/com/microsoft/azuresamples/msal4j/helpers/ Pomocné třídy pro ověřování.
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 ConfidentialClientApplication se vytvoří v souboru AuthHelper.java , jak je znázorněno v následujícím příkladu. 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 vytváření instancí 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.

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řihlášení je odeslání požadavku na /authorize koncový bod pro vašeho tenanta Microsoft Entra ID. Instance MSAL4J ConfidentialClientApplication slouží 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:

    • AuthorizationRequestUrlParameters: Parametry, které musí být nastaveny k sestavení .AuthorizationRequestUrl
    • REDIRECT_URI: Kde Microsoft Entra ID přesměruje prohlížeč – spolu s ověřovacím kódem – po shromáždění přihlašovacích údajů uživatele. Musí odpovídat identifikátoru URI přesměrování v registraci aplikace Microsoft Entra ID na webu Azure Portal.
    • SCOPES: Obory jsou oprávnění požadovaná aplikací.
      • Za normálních okolností stačí tři obory openid profile offline_access pro příjem odpovědi tokenu ID.
      • Úplný seznam oborů požadovaných aplikací najdete v souboru authentication.properties . Můžete přidat další obory, například User.Read.
  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. Instance ConfidentialClientApplication pak tento autorizační kód pro token ID a přístupový token vymění z 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:

    • AuthorizationCodeParameters: Parametry, které musí být nastaveny pro výměnu autorizačního kódu pro ID nebo přístupový token.
    • authCode: Autorizační kód přijatý v koncovém bodu přesměrování.
    • REDIRECT_URI: Identifikátor URI přesměrování použitý v předchozím kroku musí být znovu předán.
    • SCOPES: Obory použité v předchozím kroku musí být předány znovu.
  4. Pokud acquireToken je deklarace identity tokenu úspěšné, extrahují se. Pokud kontrola nesouvisení projde, výsledky se umístí do context instance IdentityContextData relace a uloží se do relace. Aplikace pak může vytvořit IdentityContextData instanci z relace prostřednictvím instance IdentityContextAdapterServlet , kdy k ní potřebuje přístup, jak je znázorněno v následujícím kódu:

    // 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 app.protect.authenticated authentication.properties vlastnost obsahuje trasy oddělené čárkami, ke kterým mají přístup pouze ověření uživatelé, jak je znázorněno v následujícím příkladu:

# 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

Graf volání

Když uživatel přejde na /call_graph, aplikace vytvoří instanci IGraphServiceClient sady Java Graph SDK , která předává přístupový token přihlášeného uživatele. Klient Graphu umístí přístupový token do Authorization hlaviček svých požadavků. Aplikace pak požádá klienta Graphu, aby volal /me koncový bod, aby poskytl podrobnosti pro aktuálně přihlášeného uživatele.

Pokud už máte platný přístupový token pro službu Graph Service s oborem User.Read , potřebujete k získání přístupu ke koncovému /me bodu jenom následující kód:

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

Rozsahy

Obory říkají Microsoft Entra ID úrovně přístupu, kterou aplikace požaduje.

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 souhlasí s jedním nebo více obory a získá token, jsou obory s souhlasem zakódovány do výsledného access_token.

Obory požadované aplikací najdete v tématu authentication.properties. Ve výchozím nastavení aplikace nastaví hodnotu oborů na User.Read. Tento konkrétní obor rozhraní Microsoft Graph API je určený pro přístup k informacím aktuálního přihlášeného uživatele. Koncový bod grafu pro přístup k tomuto informacím je https://graph.microsoft.com/v1.0/me. Všechny platné požadavky provedené v tomto koncovém bodu musí obsahovat access_token obor User.Read v Authorization hlavičce.

Více informací

Další krok

Nasazení aplikací Java WebSphere do tradiční webSphere ve službě Azure Virtual Machines