Kommentar
Å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 i din Microsoft Entra ID-klientorganisation med hjälp av Microsoft Entra ID Spring Boot Starter-klientbiblioteket för Java. Det använder OpenID Connect-protokollet.
Följande diagram visar appens topologi:
Klientappen använder Microsoft Entra ID Spring Boot Starter-klientbiblioteket för Java för att logga in en användare och hämta en ID-token från Microsoft Entra-ID. ID-token bevisar att användaren autentiseras med Microsoft Entra-ID och gör det möjligt för användaren att komma åt skyddade vägar.
Förutsättningar
- JDK-version 17. Det här exemplet har utvecklats på ett system med Java 17, 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 Så här skaffar du 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 kännedom om Spring Framework.
- 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 4-spring-web-app/1-Authentication/sign-in
Alternativt kan du 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 sökvägslängdsbegränsningar i Windows rekommenderar vi att du klonar till en katalog nära roten på enheten.
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-portalen och väljer sedan Switch directory för att ändra sessionen till den önskade Microsoft Entra ID-klientorganisationen.
Registrera appen (java-spring-webapp-auth)
Använd följande steg för att registrera appen:
Gå till Azure-portalen och välj Microsoft Entra ID.
Välj App registrations i navigeringsfönstret och välj sedan Ny registrering.
På sidan Registrera ett program som visas anger du följande information om programregistreringen:
- I avsnittet Namn anger du ett beskrivande namn på programmet som visas för appens användare – till exempel
java-spring-webapp-auth. - Under Kontotyper som stöds väljer du Endast en klientorganisation – TENANT_NAME (
TENANT_NAMEvarierar beroende på klientorganisation). - I avsnittet Omdirigerings-URI (valfritt) väljer du Web i kombinationsrutan och anger följande omdirigerings-URI:
http://localhost:8080/login/oauth2/code/.
- I avsnittet Namn anger du ett beskrivande namn på programmet som visas för appens användare – till exempel
Välj Registrera för att skapa programmet.
På appens registreringssida hittar du och kopierar värdet för Program-ID (klient) som du använder senare. 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: Rekommenderas: 180 dagar (6 månader), 90 dagar (3 månader), 365 dagar (12 månader), 545 dagar (18 månader) eller 730 dagar (24 månader).
Välj Lägg 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.
Konfigurera appen (java-spring-webapp-auth) så att den använder din appregistrering
Använd följande steg för att konfigurera appen:
Kommentar
I följande steg är ClientID 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 klientorganisations-ID för Microsoft Entra.Leta upp platshållaren
Enter_Your_Client_ID_Hereoch ersätt det befintliga värdet medjava-spring-webapp-authappens program-ID ellerclientIdsom du kopierade från Azure-portalen.Leta upp platshållaren
Enter_Your_Client_Secret_Hereoch ersätt det befintliga värdet med det värde som du sparade när du skapadejava-spring-webapp-auth, kopierat från Azure-portalen.
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 något konto, skapa 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 version. Använd kommandotaz extension add --name containerapp --upgrade --allow-previewför att installera den senaste versionen. - 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 bygga projektet:
mvn clean verifyKö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 felmeddelanden om saknade parametrar när du kör az containerapp-kommandon i Azure CLI, kontrollera att du har den senaste versionen av tillägget Azure Container Apps 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 få åtkomst till förhandsversionsfunktioner för Container Apps installerar du Container Apps-tillä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 namnrymderna Microsoft.App och Microsoft.OperationalInsights.
Kommentar
Azure Container Apps-resurser har migrerats från namnområdet Microsoft.Web till namnområdet Microsoft.App. Se migrering av namnrymd från Microsoft.Web till Microsoft.App i mars 2022 för mer information.
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 för
post-logout-redirect-uritill den distribuerade appens domännamn, som i följande exempel. Se till att ersätta<API_NAME>och<default-domain-of-container-app-environment>med dina faktiska värden. Till exempel skulle du, med standarddomänen för din Azure Container App-miljö från föregående steg ochms-identity-apisom appnamn, användahttps://ms-identity-api.<default-domain>som värde förpost-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!
application.yml-filen för applikationen innehåller för närvarande värdet på din klienthemlighet i parametern client-secret. Det är inte god praxis att ha kvar det här värdet i den här filen. Du kan också utsätta dig för en risk om du checkar in filen i ett Git-arkiv. 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 för appregistreringar på Microsofts identitetsplattform för utvecklare Appregistreringar.
Använd sökrutan för att hitta din appregistrering – till exempel
java-servlet-webapp-authentication.Öppna appregistreringen genom att välja dess namn.
Markera Autentisering på kommandomenyn.
I avsnittet Webb - Omdirigerings-URI:er väljer du Lägg till URI.
Ange URI:n för din app genom att lägga till
/login/oauth2/code/– till exempelhttps://<containerapp-name>.<default domain of container app environment>/login/oauth2/code/.Välj Spara.
Driftsätt 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 byggmiljö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 att vara kompatibel med ditt program, kan du använda argumentet --build-env-vars BP_JVM_VERSION=<YOUR_JDK_VERSION> för att justera versionsnumret.
Mer information om byggmiljövariabler finns i Byggmiljövariabler för Java i Azure Container Apps.
Verifiera appen
I det här exemplet innehåller kommandot containerapp up argumentet --query properties.configuration.ingress.fqdn, 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 applikationens utdata-URL 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. Alternativt väljer du tokeninformation. 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.
- På samtyckesskärmen, lägg märke till vilka behörigheter som begärs.
- När inloggningsflödet har slutförts bör du omdirigeras till startsidan – som visar inloggningsstatusen – eller sidan med tokeninformation, 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 Information om ID-token för att se några av anspråken i den avkodade ID-tokenen.
- 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 man använder Microsoft Entra ID Spring Boot Starter-klientbiblioteket för Java för att låta användare logga in i din Microsoft Entra ID-klientorganisation. Exemplet använder även Spring Oauth2-klienten och Spring Web-startstartarna. Exemplet använder anspråken i ID-token som hämtats från Microsoft Entra ID för att visa uppgifter om den inloggade användaren.
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. |
Anspråk i ID-token
För att extrahera tokeninformation använder appen Spring Securitys AuthenticationPrincipal- och OidcUser-objekt i en request-mappning, vilket visas i följande exempel. Se Sample Controller för fullständig information om hur den här appen använder anspråk i ID-token.
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>
Vid utloggning gör appen en POST-begäran till slutpunkten logout, som visas 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 enkel logik i gränssnittets mallsidor för att avgöra vilket innehåll som ska visas beroende på om användaren är autentiserad, vilket visas 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 sidan Information om ID-token så att endast inloggade användare kan komma åt den. Appen konfigurerar dessa rutter med hjälp av egenskapen app.protect.authenticated från filen application.yml. Om du vill konfigurera appens specifika krav använder du metoden AadWebApplicationHttpSecurityConfigurer#aadWebApplication på instansen HttpSecurity. Ett exempel finns i den här appens SecurityConfig-klass, som visas i följande kod:
@Configuration
@EnableWebSecurity
@EnableMethodSecurity
public class SecurityConfig {
@Value("${app.protect.authenticated}")
private String[] allowedOrigins;
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
// @formatter:off
http.apply(AadWebApplicationHttpSecurityConfigurer.aadWebApplication())
.and()
.authorizeHttpRequests(auth -> auth
.requestMatchers(allowedOrigins).authenticated()
.anyRequest().permitAll()
);
// @formatter:on
return http.build();
}
@Bean
@RequestScope
public ServletUriComponentsBuilder urlBuilder() {
return ServletUriComponentsBuilder.fromCurrentRequest();
}
}
Mer information
- Microsoft Identity Platform (Microsoft Entra ID för utvecklare)
- Översikt över Microsofts autentiseringsbibliotek (MSAL)
- Snabbstart: Registrera en app med Microsofts identitetsplattform
- Snabbstart: Konfigurera ett klientprogram för att få åtkomst till webb-API:er
- Förstå upplevelser för programmedgivande i Microsoft Entra ID
- Förstå användar- och administratörsmedgivande
- Programobjekt och tjänsthuvudobjekt i Microsoft Entra ID
- Nationella moln
- MSAL-kodexempel
- Microsoft Entra ID 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.