Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln visar en Java Spring Boot-webbapp som loggar in användare och hämtar en åtkomsttoken för att anropa Microsoft Graph. Den använder Microsoft Entra ID Spring Boot Starter-klientbiblioteket för Java för autentisering, auktorisering och tokenförvärv. Den använder Microsoft Graph SDK för Java för att hämta data från Graph.
Följande diagram visar appens topologi:
 Diagram som visar appens topologi.
Diagram som visar appens topologi.
Appen använder Microsoft Entra ID Spring Boot Starter-klientbiblioteket för Java för att 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
- JDK version 15. Det här exemplet har utvecklats på ett system med Java 15, men det kan vara kompatibelt med andra versioner.
- Maven 3
- Java-tilläggspaketet för Visual Studio Code rekommenderas för att köra det här exemplet i Visual Studio Code.
- En Microsoft Entra-ID-klientorganisation. Mer information finns i Hämta en Microsoft Entra-ID-klientorganisation.
- Ett användarkonto i din Microsoft Entra-ID-klientorganisation. Det här exemplet fungerar inte med ett personligt Microsoft-konto. Om du loggade in på Azure Portal med ett personligt konto och du inte har något användarkonto i din katalog måste du därför skapa ett nu.
- Visual Studio Code
- Azure Tools för Visual Studio Code
Rekommendationer
- Viss kunskap om Spring Framework.
- Viss kunskap om Linux/OSX-terminalen.
- jwt.ms för att inspektera dina token.
- Fiddler för övervakning av nätverksaktivitet och felsökning.
- 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 4-spring-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 exempelprogrammen 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:
- Logga in på Azure-portalen. 
- 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-spring-webapp-call-graph)
Använd följande steg för att registrera appen:
- Välj Appregistreringar i navigeringsfönstret och välj sedan Ny registrering. 
- 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-spring-webapp-call-graph.
- Under Kontotyper som stöds väljer du Endast Konton i den här organisationskatalogen.
- I avsnittet Omdirigerings-URI (valfritt) väljer du Webb i kombinationsrutan och anger följande omdirigerings-URI: http://localhost:8080/login/oauth2/code/.
 
- I avsnittet Namn anger du ett beskrivande programnamn för visning för användare av appen , till exempel 
- Välj Registrera för att skapa programmet. 
- 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. 
- 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. 
- Under avsnittet Klienthemlighet välj Ny klienthemlighet. 
- Skriv en beskrivning – till exempel apphemlighet. 
- Välj en av de tillgängliga varaktigheterna: Om ett år, Om två år eller Aldrig upphör att gälla. 
- Markera Lägga till. Det genererade värdet visas. 
- 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. 
- På appens registreringssida väljer du fönstret API-behörigheter i navigeringsfönstret för att öppna sidan för åtkomst till de API:er som ditt program behöver. 
- Välj Lägg till behörigheter och kontrollera sedan att fliken Microsoft API:er är markerad. 
- I avsnittet Vanliga Microsoft-API:er väljer du Microsoft Graph. 
- I avsnittet Delegerade behörigheter väljer du User.Read i listan. Använd sökrutan om det behövs. 
- Välj Lägg till behörigheter. 
Konfigurera appen (java-spring-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.
- Öppna projektet i din IDE. 
- Öppna filen src\main\resources\application.yml. 
- Leta upp platshållaren - Enter_Your_Tenant_ID_Hereoch ersätt det befintliga värdet med ditt Klient-ID för Microsoft Entra.
- Leta upp platshållaren - Enter_Your_Client_ID_Hereoch ersätt det befintliga värdet med program-ID:t eller- clientIdappen- java-spring-webapp-call-graphsom kopierades från Azure Portal.
- Leta upp platshållaren - Enter_Your_Client_Secret_Hereoch ersätt det befintliga värdet med det värde som du sparade när- java-spring-webapp-call-graphdu skapade kopierade från Azure Portal.
Kör exemplet
Följande avsnitt visar hur du distribuerar exemplet till Azure Container Apps.
Förutsättningar
- Ett Azure-konto. Om du inte har en skapar du ett kostnadsfritt konto. Du behöver ContributorellerOwnerbehörighet för Azure-prenumerationen för att kunna fortsätta. Mer information finns i Tilldela Azure-roller med Azure-portalen.
- Azure CLI.
- Azure Container Apps CLI-tillägget, version 0.3.47eller senare. Om du vill installera den senaste versionen använder duaz extension add --name containerapp --upgrade --allow-previewkommandot .
- Java Development Kit, version 17 eller senare.
- Maven.
Förbereda Spring-projektet
Använd följande steg för att förbereda projektet:
- Använd följande Maven-kommando för att skapa projektet: - mvn clean verify
- Kör exempelprojektet lokalt med hjälp av följande kommando: - mvn spring-boot:run
Ställ in
Om du vill logga in på Azure från CLI kör du följande kommando och följer anvisningarna för att slutföra autentiseringsprocessen.
az login
Kör uppgraderingskommandot för att säkerställa att du kör den senaste versionen av CLI.
az upgrade
Installera eller uppdatera sedan Azure Container Apps-tillägget för CLI.
Om du får fel om saknade parametrar när du kör az containerapp kommandon i Azure CLI kontrollerar du att den senaste versionen av Azure Container Apps-tillägget är installerad.
az extension add --name containerapp --upgrade
Kommentar
Från och med maj 2024 aktiverar Azure CLI-tillägg inte längre förhandsversionsfunktioner som standard. Om du vill komma åt förhandsversionsfunktioner för Container Apps installerar du containerapptillägget med --allow-preview true.
az extension add --name containerapp --upgrade --allow-preview true
Nu när det aktuella tillägget eller modulen har installerats registrerar du Microsoft.App namnrymderna och Microsoft.OperationalInsights .
Kommentar
Azure Container Apps-resurser har migrerats från Microsoft.Web namnområdet till Microsoft.App namnområdet. Mer information finns i Namnområdesmigrering från Microsoft.Web till Microsoft.App i mars 2022.
az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights
Skapa Azure Container Apps-miljön
Nu när azure CLI-installationen är klar kan du definiera de miljövariabler som används i hela den här artikeln.
Definiera följande variabler i bash-gränssnittet.
export RESOURCE_GROUP="ms-identity-containerapps"
export LOCATION="canadacentral"
export ENVIRONMENT="env-ms-identity-containerapps"
export API_NAME="ms-identity-api"
export JAR_FILE_PATH_AND_NAME="./target/ms-identity-spring-boot-webapp-0.0.1-SNAPSHOT.jar"
Skapa en resursgrupp.
az group create  \
    --name $RESOURCE_GROUP \
    --location $LOCATION \
Skapa en miljö med en automatiskt genererad Log Analytics-arbetsyta.
az containerapp env create \
    --name $ENVIRONMENT \
    --resource-group $RESOURCE_GROUP \
    --location $LOCATION
Visa standarddomänen för containerappmiljön. Anteckna den här domänen som ska användas i senare avsnitt.
az containerapp env show \
    --name $ENVIRONMENT \
    --resource-group $RESOURCE_GROUP \
    --query properties.defaultDomain
Förbereda appen för distribution
När du distribuerar ditt program till Azure Container Apps ändras omdirigerings-URL:en till omdirigerings-URL:en för din distribuerade appinstans i Azure Container Apps. Använd följande steg för att ändra de här inställningarna i din application.yml-fil :
- Gå till appens src\main\resources\application.yml-fil och ändra värdet - post-logout-redirect-uriför till den distribuerade appens domännamn, som du ser i följande exempel. Se till att ersätta- <API_NAME>och- <default-domain-of-container-app-environment>med dina faktiska värden. Med standarddomänen för din Azure Container App-miljö från föregående steg och- ms-identity-apiför ditt appnamn använder- https://ms-identity-api.<default-domain>du till exempel värdet- post-logout-redirect-uri.- post-logout-redirect-uri: https://<API_NAME>.<default-domain-of-container-app-environment>
- När du har sparat den här filen använder du följande kommando för att återskapa din app: - mvn clean package
Viktigt!
Den application.yml filen för programmet innehåller för närvarande värdet för din klienthemlighet i parametern client-secret . Det är inte bra att behålla det här värdet i den här filen. Du kan också ta en risk om du checkar in filen på en Git-lagringsplats. Den rekommenderade metoden finns i Hantera hemligheter i Azure Container Apps.
Uppdatera din Microsoft Entra ID-appregistrering
Eftersom omdirigerings-URI:n ändras till din distribuerade app i Azure Container Apps måste du också ändra omdirigerings-URI:n i din Microsoft Entra ID-appregistrering. Gör den här ändringen med hjälp av följande steg:
- Gå till sidan Microsofts identitetsplattform för utvecklare Appregistreringar. 
- Använd sökrutan för att söka efter din appregistrering – till exempel - java-servlet-webapp-authentication.
- Öppna appregistreringen genom att välja dess namn. 
- Markera Autentisering på kommandomenyn. 
- I avsnittet Omdirigerings-URI:er för webben - väljer du Lägg till URI. 
- Fyll i URI:n för din app och lägg till - /login/oauth2/code/– till exempel- https://<containerapp-name>.<default domain of container app environment>/login/oauth2/code/.
- Välj Spara. 
Distribuera appen
Distribuera JAR-paketet till Azure Container Apps.
Kommentar
Om det behövs kan du ange JDK-versionen i Miljövariablerna för Java-kompilering. Mer information finns i Skapa miljövariabler för Java i Azure Container Apps.
Nu kan du distribuera WAR-filen med az containerapp up CLI-kommandot.
az containerapp up \
    --name $API_NAME \
    --resource-group $RESOURCE_GROUP \
    --location $LOCATION \
    --environment $ENVIRONMENT \
    --artifact <JAR_FILE_PATH_AND_NAME> \
    --ingress external \
    --target-port 8080 \
    --query properties.configuration.ingress.fqdn
Kommentar
JDK-standardversionen är 17. Om du behöver ändra JDK-versionen för kompatibilitet med ditt program kan du använda --build-env-vars BP_JVM_VERSION=<YOUR_JDK_VERSION> argumentet för att justera versionsnumret.
Mer information om hur du skapar miljövariabler finns i Skapa miljövariabler för Java i Azure Container Apps.
Verifiera appen
I det här exemplet containerapp up innehåller --query properties.configuration.ingress.fqdn kommandot argumentet, som returnerar det fullständigt kvalificerade domännamnet (FQDN), även kallat appens URL. Använd följande steg för att kontrollera appens loggar för att undersöka eventuella distributionsproblem:
- Öppna url:en för utdataprogrammet från sidan Utdata i avsnittet Distribution . 
- I navigeringsfönstret på sidan Översikt över Azure Container Apps-instansen väljer du Loggar för att kontrollera appens loggar. 
Utforska exemplet
Använd följande steg för att utforska exemplet:
- Observera den inloggade eller utloggade statusen som visas i mitten av skärmen.
- 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. Du kan också välja tokeninformation eller anropsgraf. Eftersom den här sidan är skyddad och kräver autentisering omdirigeras du automatiskt till inloggningssidan.
- På nästa sida följer du anvisningarna och loggar in med ett konto i Microsoft Entra ID-klientorganisationen.
- Observera de omfång som begärs på medgivandeskärmen.
- När inloggningsflödet har slutförts bör du omdirigeras till startsidan – som visar inloggningsstatusen – eller någon av de andra sidorna, beroende på vilken knapp som utlöste inloggningsflödet.
- Observera att den sammanhangskänsliga knappen nu säger Logga ut och visar ditt användarnamn.
- Om du är på startsidan väljer du ID-tokeninformation för att se några av ID-tokens avkodade anspråk.
- Välj Samtalsdiagram för att ringa ett anrop till Microsoft Graphs /me-slutpunkt och se ett urval av användarinformationen som erhålls.
- Använd knappen i hörnet för att logga ut. Statussidan visar det nya tillståndet.
Om koden
Det här exemplet visar hur du använder Microsoft Entra ID Spring Boot Starter-klientbiblioteket för Java för att logga in användare i din Microsoft Entra-ID-klientorganisation och hämta en åtkomsttoken för att anropa Microsoft Graph. Exemplet använder även Spring Oauth2-klienten och Spring Web-startstartarna.
Innehåll
I följande tabell visas innehållet i exempelprojektmappen:
| Fil/mapp | beskrivning | 
|---|---|
| pom.xml | Programberoenden. | 
| src/main/resources/templates/ | Thymeleaf-mallar för användargränssnittet. | 
| src/main/resources/application.yml | Program- och Microsoft Entra ID Boot Starter-bibliotekskonfiguration. | 
| src/main/java/com/microsoft/azuresamples/msal4j/msidentityspringbootwebapp/ | Den här katalogen innehåller huvudprogrammets startpunkt, styrenhet och konfigurationsklasser. | 
| .../MsIdentitySpringBootWebappApplication.java | Huvudklass. | 
| .../SampleController.java | Styrenhet med slutpunktsmappningar. | 
| .../SecurityConfig.java | Säkerhetskonfiguration – till exempel vilka vägar som kräver autentisering. | 
| .../Utilities.java | Verktygsklass – till exempel filter-ID-tokenanspråk. | 
| CHANGELOG.md | Lista över ändringar i exemplet. | 
| CONTRIBUTING.md | Riktlinjer för att bidra till exemplet. | 
| LICENS | Licensen för exemplet. | 
ID-tokenanspråk
För att extrahera tokeninformation använder appen Spring Securitys AuthenticationPrincipal och OidcUser objektet i en begärandemappning, som du ser i följande exempel. Se Exempelkontrollanten för fullständig information om hur den här appen använder ID-tokenanspråk.
import org.springframework.security.oauth2.core.oidc.user.OidcUser;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
//...
@GetMapping(path = "/some_path")
public String tokenDetails(@AuthenticationPrincipal OidcUser principal) {
    Map<String, Object> claims = principal.getIdToken().getClaims();
}
Inloggnings- och utloggningslänkar
För inloggning skickar appen en begäran till Microsoft Entra ID-inloggningsslutpunkten automatiskt konfigurerad av Microsoft Entra ID Spring Boot Starter-klientbiblioteket för Java, enligt följande exempel:
<a class="btn btn-success" href="/oauth2/authorization/azure">Sign In</a>
För utloggning gör appen en POST-begäran till logout slutpunkten, som du ser i följande exempel:
<form action="#" th:action="@{/logout}" method="post">
  <input class="btn btn-warning" type="submit" value="Sign Out" />
</form>
Autentiseringsberoende gränssnittselement
Appen har lite enkel logik på mallsidorna för användargränssnittet för att bestämma innehåll som ska visas baserat på om användaren autentiseras, som du ser i följande exempel med Hjälp av Spring Security Thymeleaf-taggar:
<div sec:authorize="isAuthenticated()">
  this content only shows to authenticated users
</div>
<div sec:authorize="isAnonymous()">
  this content only shows to not-authenticated users
</div>
Skydda vägar med AADWebSecurityConfigurerAdapter
Som standard skyddar appen ID-tokeninformationen  och Anropa Graph-sidor så att endast inloggade användare kan komma åt dem. Appen konfigurerar dessa vägar från app.protect.authenticated egenskapen från filen application.yml . Om du vill konfigurera appens specifika krav kan du utöka AADWebSecurityConfigurationAdapter i någon av dina klasser. Ett exempel finns i den här appens SecurityConfig-klass , som visas i följande kod:
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends AADWebSecurityConfigurerAdapter{
  @Value( "${app.protect.authenticated}" )
  private String[] protectedRoutes;
    @Override
    public void configure(HttpSecurity http) throws Exception {
    // use required configuration form AADWebSecurityAdapter.configure:
    super.configure(http);
    // add custom configuration:
    http.authorizeRequests()
      .antMatchers(protectedRoutes).authenticated()     // limit these pages to authenticated users (default: /token_details, /call_graph)
      .antMatchers("/**").permitAll();                  // allow all other routes.
    }
}
Anropsdiagram
När användaren navigerar till /call_graphskapar programmet en instans av med hjälp av GraphServiceClient en Oauth2AuthorizedClient eller graphAuthorizedClient som Microsoft Entra ID-startstarten har förberett. Appen ber att GraphServiceClient få anropa /me slutpunkten och visar information om den aktuella inloggade användaren. GraphServiceClient kommer från Microsoft Graph SDK för Java, v3.
Oauth2AuthorizedClient Måste förberedas med rätt omfång. Se application.yml-filen  och följande omfångsavsnitt. Oauth2AuthorizedClient Används för att visa åtkomsttoken och placera den Authorization i rubriken GraphServiceClient för begäranden, som du ser i följande exempel:
//see SampleController.java
@GetMapping(path = "/call_graph")
public String callGraph(@RegisteredOAuth2AuthorizedClient("graph") OAuth2AuthorizedClient graphAuthorizedClient) {
  // See the Utilities.graphUserProperties() method for the full example of the following operation:
  GraphServiceClient graphServiceClient = Utilities.getGraphServiceClient(graphAuthorizedClient);
  User user = graphServiceClient.me().buildRequest().get();
  return user.displayName;
}
I följande exempel från filen application.yml visas de begärda omfången:
# see application.yml file
authorization-clients:
  graph:
    # Specifies the Microsoft Graph scopes that your app needs access to:
    scopes: https://graph.microsoft.com/User.Read
Omfattningar
Omfång anger för Microsoft Entra-ID vilken åtkomstnivå programmet begär. De Microsoft Graph-omfång som begärs av det här programmet finns i application.yml.
Som standard anger programmet omfångsvärdet till https://graph.microsoft.com/User.Read. Omfånget User.Read är för åtkomst till informationen för den aktuella inloggade användaren från /me-slutpunkten. Giltiga begäranden till /me-slutpunkten måste innehålla omfånget User.Read .
När en användare loggar in presenterar Microsoft Entra-ID en medgivandedialog för användaren baserat på de omfång som programmet begär. Om användaren samtycker till ett eller flera omfång och hämtar en token kodas omfångsmedgivande till i den resulterande åtkomsttoken.
I den graphAuthorizedClient här appen visar den åtkomsttoken som bevisar vilka omfång som användaren samtyckt till. Appen använder den här token för att skapa en instans av GraphServiceClient som hanterar Graph-begäranden.
Med hjälp av GraphServiceClient.me().buildRequest().get()skapas och görs en begäran till https://graph.microsoft.com/v1.0/me. Åtkomsttoken placeras i Authorization rubriken för begäran.
Mer information
- Microsofts identitetsplattform dokumentation
- Översikt över Microsoft Authentication Library (MSAL)
- Snabbstart: Registrera ett program med Microsofts identitetsplattform
- Snabbstart: Konfigurera ett klientprogram för åtkomst till webb-API:er
- Förstå funktioner för medgivande för Microsoft Entra-ID-program
- Förstå användar- och administratörsmedgivande
- Översikt över program- och tjänstobjekt i Microsoft Entra ID
- Nationella moln
- MSAL-kodexempel
- Azure Active Directory Spring Boot Starter-klientbibliotek för Java
- Microsoft Authentication Library for Java (MSAL4J)
- MSAL4J Wiki
- ID-token
- Åtkomsttoken i Microsofts identitetsplattform
Mer information om hur OAuth 2.0-protokoll fungerar i det här scenariot och andra scenarier finns i Autentiseringsscenarier för Microsoft Entra-ID.
 Skärmbild av exempelappen.
Skärmbild av exempelappen.