Condividi tramite


Proteggere le app Java Spring Boot usando gruppi e attestazioni di gruppo

Questo articolo illustra un'app Web Java Spring Boot che usa la libreria client Spring Boot Starter di Microsoft Entra ID per Java per l'autenticazione, l'autorizzazione e l'acquisizione di token. L'app usa il protocollo OpenID Connect per accedere agli utenti e limita l'accesso alle pagine in base all'appartenenza al gruppo di sicurezza Microsoft Entra ID.

Il diagramma seguente illustra la topologia dell'app:

Diagram that shows the topology of the app.Diagramma che mostra la topologia dell'app.

L'app client usa la libreria client Spring Boot Starter per Spring Boot ID di Microsoft Entra per Java per consentire agli utenti di accedere a un tenant di Microsoft Entra ID e ottenere un token ID da Microsoft Entra ID.

Il token ID contiene l'attestazione groups. L'applicazione carica le attestazioni nell'elenco Spring GrantedAuthorities per l'utente connesso. Questi valori determinano le pagine a cui l'utente è autorizzato ad accedere.

Per un video che illustra questo scenario, vedere Implementare l'autorizzazione nelle applicazioni usando ruoli dell'app, gruppi di sicurezza, ambiti e ruoli della directory.

Prerequisiti

  • JDK versione 15. Questo esempio è stato sviluppato in un sistema con Java 15, ma potrebbe essere compatibile con altre versioni.
  • Maven 3
  • Java Extension Pack per Visual Studio Code è consigliato per l'esecuzione di questo esempio in Visual Studio Code.
  • Tenant di Microsoft Entra ID. Per altre informazioni, vedere Avvio rapido: Configurare un tenant.
  • Un account utente nel tenant di Microsoft Entra ID. Questo esempio non funziona con un account Microsoft personale. Pertanto, se è stato eseguito l'accesso al portale di Azure con un account personale e non si ha un account utente nella directory, è necessario crearne uno ora.
  • Due gruppi di sicurezza, denominati AdminGroup e UserGroup, contenenti l'utente o gli utenti che si desidera firmare e testare questo esempio. In alternativa, è possibile aggiungere l'utente a due gruppi di sicurezza esistenti nel tenant. Se si sceglie di usare i gruppi esistenti, assicurarsi di modificare la configurazione di esempio per usare il nome e l'ID oggetto dei gruppi di sicurezza esistenti.
  • Visual Studio Code
  • Strumenti di Azure per Visual Studio Code

Consigli

  • Una certa familiarità con Spring Framework.
  • Una certa familiarità con il terminale Linux/OSX.
  • jwt.ms per controllare i token.
  • Fiddler per monitorare l'attività di rete e la risoluzione dei problemi.
  • Segui il blog di Microsoft Entra ID per rimanere aggiornato con gli ultimi sviluppi.

Configurare l'esempio

Le sezioni seguenti illustrano come configurare l'applicazione di esempio.

Clonare o scaricare il repository di esempio

Per clonare l'esempio, aprire una finestra Bash e usare il comando seguente:

git clone https://github.com/Azure-Samples/ms-identity-msal-java-samples.git
cd 4-spring-web-app/3-Authorization-II/groups

In alternativa, passare al repository ms-identity-msal-java-samples , quindi scaricarlo come file .zip ed estrarlo nel disco rigido.

Importante

Per evitare limitazioni di lunghezza del percorso di file in Windows, clonare o estrarre il repository in una directory vicino alla radice del disco rigido.

Registrare l'applicazione di esempio con il tenant di Microsoft Entra ID

In questo esempio è presente un progetto. Le sezioni seguenti illustrano come registrare l'app usando il portale di Azure.

Scegliere il tenant microsoft Entra ID in cui si desidera creare le applicazioni

Per scegliere il tenant, seguire questa procedura:

  1. Accedere al portale di Azure.

  2. Se l'account è presente in più tenant di Microsoft Entra ID, selezionare il profilo nell'angolo del portale di Azure e quindi selezionare Cambia directory per modificare la sessione nel tenant di Microsoft Entra ID desiderato.

Registrare l'app (java-spring-webapp-groups)

Per registrare l'app, seguire questa procedura:

  1. Passare al portale di Azure e selezionare Microsoft Entra ID.

  2. Selezionare Registrazioni app nel riquadro di spostamento e quindi selezionare Nuova registrazione.

  3. Nella pagina Registra un'applicazione visualizzata immettere le informazioni di registrazione dell'applicazione seguenti:

    • Nella sezione Nome immettere un nome di applicazione significativo da visualizzare agli utenti dell'app, java-spring-webapp-groupsad esempio .
    • In Tipi di account supportati selezionare Account solo in questa directory organizzativa.
    • Nella sezione URI di reindirizzamento (facoltativo) selezionare Web nella casella combinata e immettere l'URI di reindirizzamento seguente: http://localhost:8080/login/oauth2/code/.
  4. Selezionare Registra per creare l'applicazione.

  5. Nella pagina di registrazione dell'app trovare e copiare il valore ID applicazione (client) da usare in un secondo momento. Questo valore viene usato nel file o nei file di configurazione dell'app.

  6. Nella pagina di registrazione dell'app selezionare Certificati e segreti nel riquadro di spostamento per aprire la pagina in cui è possibile generare segreti e caricare i certificati.

  7. Nella sezione Segreti client seleziona Nuovo segreto client.

  8. Digitare una descrizione, ad esempio il segreto dell'app.

  9. Selezionare una delle durate disponibili: 6 mesi, 12 mesi o Personalizzato.

  10. Selezionare Aggiungi. Viene visualizzato il valore generato.

  11. Copiare e salvare il valore generato da usare nei passaggi successivi. Questo valore è necessario per i file di configurazione del codice. Questo valore non viene visualizzato di nuovo e non è possibile recuperarlo con altri mezzi. Assicurarsi quindi di salvarlo dal portale di Azure prima di passare a qualsiasi altra schermata o riquadro.

  12. Nella pagina di registrazione dell'app selezionare Autorizzazioni API nel riquadro di spostamento per aprire la pagina in cui è possibile aggiungere l'accesso alle API necessarie per l'applicazione.

  13. Selezionare Aggiungi autorizzazione.

  14. Verificare che la scheda API Microsoft sia selezionata.

  15. Nella sezione API Microsoft più usate selezionare Microsoft Graph.

  16. Nella sezione Autorizzazioni delegate selezionare GroupMember.Read.All dall'elenco. Se necessario, usare la casella di ricerca. Questa autorizzazione è necessaria per ottenere le appartenenze ai gruppi tramite Graph se si verifica lo scenario di eccedenza.

  17. Selezionare il pulsante per concedere il consenso amministratore per GroupMember.Read.All.

  18. Selezionare Aggiungi autorizzazioni.

Creazione di gruppi di sicurezza

Per creare gruppi di sicurezza, seguire questa procedura:

  1. Passare al portale di Azure e selezionare Microsoft Entra ID.

  2. Selezionare Gruppi nel riquadro di spostamento.

  3. Nel riquadro Gruppi selezionare Nuovo gruppo e quindi specificare le informazioni seguenti:

    • In Tipo di gruppo selezionare Sicurezza.
    • In Nome gruppo immettere AdminGroup.
    • Per Descrizione gruppo immettere Gruppo di sicurezza amministratore.
    • Aggiungere proprietari di gruppi e membri del gruppo da usare e testare in questo esempio.
    • Seleziona Crea.
  4. Nel riquadro Gruppi selezionare Nuovo gruppo e quindi specificare le informazioni seguenti:

    • In Tipo di gruppo selezionare Sicurezza.
    • In Nome gruppo immettere UserGroup.
    • Per Descrizione gruppo immettere Gruppo di sicurezza utenti.
    • Aggiungere proprietari di gruppi e membri del gruppo da usare e testare in questo esempio.
    • Seleziona Crea.

Per ulteriori informazioni, consultare Gestire i gruppi Microsoft Entra e l'appartenenza ai gruppi.

Configurare i gruppi di sicurezza

Sono disponibili le opzioni seguenti su come configurare ulteriormente l'applicazione per ricevere l'attestazione gruppi:

Nota

Per ottenere il gruppo locale o On Premises Group Security Identifier anziché l'ID gruppo, vedere la sezione Prerequisiti per l'uso samAccountName degli attributi di gruppo sincronizzati da Active Directory in Configurare le attestazioni di gruppo per le applicazioni usando Microsoft Entra ID.

Configurare l'applicazione per ricevere tutti i gruppi a cui viene assegnato l'utente connesso, inclusi i gruppi annidati

Per configurare l'app, seguire questa procedura:

  1. Nella pagina di registrazione dell'app selezionare Configurazione token nel riquadro di spostamento per aprire la pagina in cui è possibile configurare i token forniti dalle attestazioni rilasciate all'applicazione.

  2. Selezionare Aggiungi attestazione gruppi per aprire la schermata Modifica attestazione gruppi.

  3. Selezionare Gruppi di sicurezza O Tutti i gruppi (incluse le liste di distribuzione ma non i gruppi assegnati all'applicazione). La scelta di entrambi nega l'effetto dell'opzione Gruppi di sicurezza.

  4. Nella sezione ID selezionare ID gruppo. Questa selezione fa sì che Microsoft Entra ID invii l'IDoggetto dei gruppi a cui l'utente viene assegnato nell'attestazione di gruppi del token ID ricevuto dall'app dopo l'accesso di un utente.

Configurare l'applicazione per ricevere i valori delle attestazioni dei gruppi da un set filtrato di gruppi a cui potrebbe essere assegnato un utente

Questa opzione è utile quando si verificano i casi seguenti:

  • L'applicazione è interessata a un set selezionato di gruppi a cui potrebbe essere assegnato un utente di accesso.
  • L'app non è interessata a ogni gruppo di sicurezza a cui viene assegnato questo utente nel tenant.

Questa opzione consente all'applicazione di evitare il problema di eccedenza .

Nota

Questa funzionalità non è disponibile nell'edizione Microsoft Entra ID Free.

Le assegnazioni di gruppi annidate non sono disponibili quando si usa questa opzione.

Per abilitare questa opzione nell'app, seguire questa procedura:

  1. Nella pagina di registrazione dell'app selezionare Configurazione token nel riquadro di spostamento per aprire la pagina in cui è possibile configurare i token forniti dalle attestazioni rilasciate all'applicazione.

  2. Selezionare Aggiungi attestazione gruppi per aprire la schermata Modifica attestazione gruppi.

  3. Selezionare Gruppi assegnati all'applicazione e non selezionare altre opzioni. Se si scelgono più opzioni, ad esempio Gruppi di sicurezza o Tutti i gruppi (incluse le liste di distribuzione ma non i gruppi assegnati all'applicazione), queste opzioni negano l'effetto dell'opzione Gruppi assegnati all'applicazione.

  4. Nella sezione ID selezionare ID gruppo. Questa selezione fa sì che Microsoft Entra ID invii l'IDoggetto dei gruppi a cui l'utente viene assegnato nell'attestazione di gruppi del token ID ricevuto dall'app dopo l'accesso di un utente.

  5. Se si espone un'API Web usando l'opzione Esporre un'API , è anche possibile scegliere l'opzione ID gruppo nella sezione Accesso . Questa selezione fa sì che Microsoft Entra ID invii l'ID oggetto dei gruppi a cui l'utente viene assegnato nell'attestazione di gruppi del token di accesso rilasciato alle applicazioni client dell'API.

  6. Nella pagina di registrazione dell'app selezionare Panoramica nel riquadro di spostamento per aprire la schermata Panoramica dell'applicazione.

  7. Selezionare il collegamento ipertestuale con il nome dell'applicazione in Applicazione gestita nella directory locale. Questo titolo di campo potrebbe essere troncato, ad esempio applicazione gestita in .... Quando si seleziona questo collegamento, passare alla pagina Panoramica dell'applicazione aziendale associata all'entità servizio per l'applicazione nel tenant in cui è stata creata. È possibile tornare alla pagina di registrazione dell'app usando il pulsante Indietro del browser.

  8. Selezionare Utenti e gruppi nel riquadro di spostamento per aprire la pagina in cui è possibile assegnare utenti e gruppi all'applicazione.

  9. Seleziona Aggiungi utente.

  10. Selezionare Utenti e gruppi nella schermata risultante.

  11. Scegliere i gruppi da assegnare a questa applicazione.

  12. Selezionare Seleziona per completare la selezione dei gruppi.

  13. Selezionare Assegna per completare il processo di assegnazione del gruppo.

    L'applicazione riceve ora questi gruppi selezionati nell'attestazione dei gruppi quando un utente che accede all'app è membro di uno o più gruppi assegnati.

  14. Selezionare Proprietà nel riquadro di spostamento per aprire la pagina in cui sono elencate le proprietà di base dell'applicazione. Impostare il flag Assegnazione utente obbligatoria? su .

Importante

Quando si imposta Assegnazione utente obbligatoria? su , Microsoft Entra ID verifica che solo gli utenti assegnati all'applicazione nel riquadro Utenti e gruppi siano in grado di accedere all'app. È possibile assegnare gli utenti direttamente o assegnando i gruppi di sicurezza a cui appartengono.


Configurare l'esempio di codice per usare la registrazione dell'app e i gruppi di sicurezza (java-spring-webapp-groups)

Usare la procedura seguente per configurare l'app:

Nota

Nei passaggi seguenti è ClientID uguale Application ID a o AppId.

  1. Aprire il progetto nell'IDE.

  2. Aprire il file src\main\resources\application.yml .

  3. Trovare il segnaposto Enter_Your_Tenant_ID_Here e sostituire il valore esistente con l'ID tenant di Microsoft Entra.

  4. Trovare il segnaposto Enter_Your_Client_ID_Here e sostituire il valore esistente con l'ID applicazione o clientId l'app java-spring-webapp-groups copiata dal portale di Azure.

  5. Trovare il segnaposto Enter_Your_Client_Secret_Here e sostituire il valore esistente con il valore salvato durante la creazione della java-spring-webapp-groups copia dalla portale di Azure.

  6. Trovare il segnaposto Enter_Your_Admin_Group_ID_Here e sostituire il valore esistente con il objectId valore di AdminGroup.

  7. Trovare il segnaposto Enter_Your_User_Group_ID_Here e sostituire il valore esistente con il objectId valore di UserGroup.

  8. Aprire il file src/main/java/com/microsoft/azuresamples/msal4j/msidentityspringbootwebapp/SampleController.java .

  9. Trovare il segnaposto Enter_Your_Admin_Group_ID_Here e sostituire il valore esistente con il objectId valore di AdminGroup.

  10. Trovare il segnaposto Enter_Your_User_Group_ID_Here e sostituire il valore esistente con il objectId valore di UserGroup.

Eseguire l'esempio

Le sezioni seguenti illustrano come distribuire l'esempio in App Contenitore di Azure.

Prerequisiti

Preparare il progetto Spring

Per preparare il progetto, seguire questa procedura:

  1. Usare il comando Maven seguente per compilare il progetto:

    mvn clean verify
    
  2. Eseguire il progetto di esempio in locale usando il comando seguente:

    mvn spring-boot:run
    

Attrezzaggio

Per accedere ad Azure dall'interfaccia della riga di comando, eseguire il comando seguente e seguire le istruzioni per completare il processo di autenticazione.

az login

Assicurarsi di eseguire l'ultima versione dell'interfaccia della riga di comando eseguire il comando di aggiornamento.

az upgrade

Installare o aggiornare quindi l'estensione App contenitore di Azure per l'interfaccia della riga di comando.

Se si ricevono errori relativi ai parametri mancanti quando si eseguono az containerapp comandi nell'interfaccia della riga di comando di Azure, assicurarsi di avere installato la versione più recente dell'estensione App Azure Container.

az extension add --name containerapp --upgrade

Nota

A partire da maggio 2024, le estensioni dell'interfaccia della riga di comando di Azure non abilitano più le funzionalità di anteprima per impostazione predefinita. Per accedere alle funzionalità di anteprima di App contenitore, installare l'estensione App contenitore con --allow-preview true.

az extension add --name containerapp --upgrade --allow-preview true

Ora che l'estensione o il modulo corrente è installato, registrare gli spazi dei nomi Microsoft.App e Microsoft.OperationalInsights.

Nota

Le risorse di App contenitore di Azure sono state migrate dallo spazio dei nomi Microsoft.Web allo spazio dei nomi Microsoft.App. Per ulteriori dettagli, vedere Migrazione dello spazio dei nomi da Microsoft.Web a Microsoft.App nel mese di marzo 2022.

az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights

Creare l'ambiente App Azure Container

Dopo aver completato la configurazione dell'interfaccia della riga di comando di Azure, è possibile definire le variabili di ambiente usate in questo articolo.

Definire le variabili seguenti nella shell Bash.

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"

Crea un gruppo di risorse.

az group create  \
    --name $RESOURCE_GROUP \
    --location $LOCATION \

Creare un ambiente con un'area di lavoro Log Analytics generata automaticamente.

az containerapp env create \
    --name $ENVIRONMENT \
    --resource-group $RESOURCE_GROUP \
    --location $LOCATION

Mostra il dominio predefinito dell'ambiente dell'app contenitore. Annotare questo dominio da usare nelle sezioni successive.

az containerapp env show \
    --name $ENVIRONMENT \
    --resource-group $RESOURCE_GROUP \
    --query properties.defaultDomain

Preparare l'app per la distribuzione

Quando si distribuisce l'applicazione in App Azure Container, l'URL di reindirizzamento viene modificato nell'URL di reindirizzamento dell'istanza dell'app distribuita in App Azure Container. Usare la procedura seguente per modificare queste impostazioni nel file application.yml :

  1. Passare al file src\main\resources\application.yml dell'app e modificare il valore di post-logout-redirect-uri in base al nome di dominio dell'app distribuita, come illustrato nell'esempio seguente. Assicurarsi di sostituire <API_NAME> e <default-domain-of-container-app-environment> con i valori effettivi. Ad esempio, con il dominio predefinito per l'ambiente dell'app Azure Container del passaggio precedente e ms-identity-api per il nome dell'app, usare https://ms-identity-api.<default-domain> per il post-logout-redirect-uri valore .

    post-logout-redirect-uri: https://<API_NAME>.<default-domain-of-container-app-environment>
    
  2. Dopo aver salvato questo file, usare il comando seguente per ricompilare l'app:

    mvn clean package
    

Importante

Il file application.yml dell'applicazione contiene attualmente il valore del segreto client nel client-secret parametro . Non è consigliabile mantenere questo valore in questo file. Se si esegue il commit del file in un repository Git, potrebbe anche essere rischioso. Per l'approccio consigliato, vedere Gestire i segreti nelle app Azure Container.

Aggiornare la registrazione dell'app Microsoft Entra ID

Poiché l'URI di reindirizzamento cambia nell'app distribuita in App Azure Container, è anche necessario modificare l'URI di reindirizzamento nella registrazione dell'app Microsoft Entra ID. Attenersi alla seguente procedura per apportare questa modifica:

  1. Passare alla pagina Registrazioni app di Microsoft Identity Platform per sviluppatori.

  2. Usare la casella di ricerca per cercare la registrazione dell'app, java-servlet-webapp-authenticationad esempio .

  3. Aprire la registrazione dell'app selezionandone il nome.

  4. Seleziona Autenticazione dal menu.

  5. Nella sezione URI di reindirizzamento Web - selezionare Aggiungi URI.

  6. Compilare l'URI dell'app, aggiungendo /login/oauth2/code/ , ad esempio . https://<containerapp-name>.<default domain of container app environment>/login/oauth2/code/

  7. Seleziona Salva.

Distribuire l'app

Distribuire il pacchetto JAR in App contenitore di Azure.

Nota

Se necessario, è possibile specificare la versione JDK nelle variabili di ambiente di compilazione Java. Per altre informazioni, vedere Creare variabili di ambiente per Java in App Contenitore di Azure.

Ora è possibile distribuire il file WAR con il comando dell'interfaccia della riga di comando az containerapp up.

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

Nota

La versione predefinita di JDK è 17. Se è necessario modificare la versione di JDK per la compatibilità con l'applicazione, è possibile usare l'argomento --build-env-vars BP_JVM_VERSION=<YOUR_JDK_VERSION> per modificare il numero di versione.

Per altre variabili di ambiente di compilazione, vedere Creare variabili di ambiente per Java in App Contenitore di Azure.

Convalidare l'app

In questo esempio il containerapp up comando include l'argomento --query properties.configuration.ingress.fqdn , che restituisce il nome di dominio completo (FQDN), noto anche come URL dell'app. Usare la procedura seguente per controllare i log dell'app per analizzare eventuali problemi di distribuzione:

  1. Accedere all'URL dell'applicazione di output dalla pagina Output della sezione Distribuzione .

  2. Nel riquadro di spostamento della pagina Panoramica dell'istanza di App Azure Container selezionare Log per controllare i log dell'app.

Esaminare l'esempio

Per esplorare l'esempio, seguire questa procedura:

  1. Si noti lo stato di accesso o disconnesso visualizzato al centro della schermata.
  2. Selezionare il pulsante sensibile al contesto nell'angolo. Questo pulsante legge Accedi quando si esegue l'app per la prima volta. In alternativa, selezionare i dettagli del token, solo gli amministratori o gli utenti normali. Poiché queste pagine sono protette e richiedono l'autenticazione, si viene reindirizzati automaticamente alla pagina di accesso.
  3. Nella pagina successiva seguire le istruzioni e accedere con un account nel tenant microsoft Entra ID.
  4. Nella schermata di consenso notare gli ambiti richiesti.
  5. Al termine del flusso di accesso, si dovrebbe essere reindirizzati alla home page, che mostra lo stato di accesso o una delle altre pagine, a seconda del pulsante che ha attivato il flusso di accesso.
  6. Si noti che il pulsante sensibile al contesto ora indica Disconnetti e visualizza il nome utente.
  7. Se si è nella home page, selezionare ID Token Details (Dettagli token ID) per visualizzare alcune delle attestazioni decodificate del token ID, inclusi i gruppi.
  8. Selezionare Solo amministratori per visualizzare ./admin_only Solo gli utenti appartenenti al AdminGroup gruppo di sicurezza possono visualizzare questa pagina. In caso contrario, viene visualizzato un messaggio di errore di autorizzazione.
  9. Selezionare Utenti normali per visualizzare la /regular_user pagina. Solo gli utenti appartenenti al AdminGroup gruppo di sicurezza possono visualizzare questa pagina. In caso contrario, viene visualizzato un messaggio di errore di autorizzazione.
  10. Usare il pulsante nell'angolo per disconnettersi. La pagina di stato riflette il nuovo stato.

Informazioni sul codice

Questo esempio illustra come usare la libreria client Spring Boot Starter di Spring Boot ID di Microsoft Entra per Java per consentire agli utenti di accedere al tenant di Microsoft Entra ID. L'esempio usa anche gli starter Spring Oauth2 Client e Spring Web Boot. L'esempio usa le attestazioni del token ID ottenuto da Microsoft Entra ID per visualizzare i dettagli dell'utente connesso e per limitare l'accesso ad alcune pagine usando l'attestazione groups per l'autorizzazione.

Contenuto

La tabella seguente illustra il contenuto della cartella del progetto di esempio:

File/cartella Descrizione
pom.xml Dipendenze dell'applicazione.
src/main/resources/templates/ Modelli thymeleaf per l'interfaccia utente.
src/main/resources/application.yml Configurazione della libreria di avvio di avvio dell'applicazione e dell'ID Microsoft Entra.
src/main/java/com/microsoft/azuresamples/msal4j/msidentityspringbootwebapp/ Questa directory contiene i principali punti di ingresso, controller e classi di configurazione dell'applicazione.
.../MsIdentitySpringBootWebappApplication.java Classe principale.
.../SampleController.java Controller con mapping degli endpoint.
.../SecurityConfig.java Configurazione di sicurezza, ad esempio le route che richiedono l'autenticazione.
.../Utilities.java Classe di utilità, ad esempio attestazioni del token ID filtro.
CHANGELOG.md Elenco delle modifiche apportate all'esempio.
CONTRIBUTING.md Linee guida per contribuire all'esempio.
LICENZA Licenza per l'esempio.

Attestazioni del token ID

Per estrarre i dettagli del token, l'app usa l'oggetto e OidcUser di AuthenticationPrincipal Spring Security in un mapping delle richieste, come illustrato nell'esempio seguente. Per informazioni dettagliate su come questa app usa le attestazioni del token ID, vedi Controller di esempio.

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

Elaborare un'attestazione di gruppi nel token ID

L'attestazione di gruppi del token include i nomi dei gruppi a cui è assegnato l'utente connesso, come illustrato nell'esempio seguente:

{
  ...
  "groups": [
    "xyz-id-xyz",
    "xyz-id-xyz",]
  ...
}

Un modo comune per accedere ai nomi dei gruppi è documentato nella sezione Attestazioni token ID.

Microsoft Entra ID Boot Starter v3.5 e versioni successive analizza automaticamente l'attestazione dei gruppi e aggiunge ogni gruppo all'utente connesso Authorities. Questa configurazione consente agli sviluppatori di usare i gruppi con annotazioni di condizione Spring PrePost usando il hasAuthority metodo . Ad esempio, è possibile trovare le condizioni seguenti @PreAuthorize illustrate in SampleController.java:

@GetMapping(path = "/admin_only")
@PreAuthorize("hasAuthority('enter-admin-group-id-here')")
public String adminOnly(Model model) {
    // restrict to users who belong to AdminGroup
}
@GetMapping(path = "/regular_user")
@PreAuthorize("hasAnyAuthority('enter-user-group-id-here','enter-admin-group-id-here')")
public String regularUser(Model model) {
    // restrict to users who belong to any of UserGroup or AdminGroup
}

Il codice seguente ottiene un elenco completo di fonti per un determinato utente:

@GetMapping(path = "/some_path")
public String tokenDetails(@AuthenticationPrincipal OidcUser principal) {
   Collection<? extends GrantedAuthority> authorities = principal.getAuthorities();
}

Per l'accesso, l'app effettua una richiesta all'endpoint di accesso di Microsoft Entra ID configurato automaticamente dalla libreria client Spring Boot Starter per Microsoft Entra ID per Java, come illustrato nell'esempio seguente:

<a class="btn btn-success" href="/oauth2/authorization/azure">Sign In</a>

Per la disconnessione, l'app effettua una richiesta POST all'endpoint logout , come illustrato nell'esempio seguente:

<form action="#" th:action="@{/logout}" method="post">
  <input class="btn btn-warning" type="submit" value="Sign Out" />
</form>

Elementi dell'interfaccia utente dipendenti dall'autenticazione

L'app ha una logica semplice nelle pagine del modello di interfaccia utente per determinare il contenuto da visualizzare in base all'autenticazione dell'utente, come illustrato nell'esempio seguente usando i tag Spring Security Thymeleaf:

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

Proteggere le route con AADWebSecurityConfigurerAdapter

Per impostazione predefinita, l'app protegge le pagine ID Token Details, Admins Only e Regular Users in modo che solo gli utenti connessi possano accedervi. L'app configura queste route usando la app.protect.authenticated proprietà dal file application.yml . Per configurare i requisiti specifici dell'app, è possibile estendere AADWebSecurityConfigurationAdapter in una delle classi. Per un esempio, vedi la classe SecurityConfig dell'app, illustrata nel codice seguente:

@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, /admin_only, /regular_user)
      .antMatchers("/**").permitAll();                  // allow all other routes.
    }
}

Attestazione di eccedenza dei gruppi

Per assicurarsi che le dimensioni del token non superino i limiti delle dimensioni dell'intestazione HTTP, Microsoft Identity Platform limita il numero di ID oggetto inclusi nell'attestazione dei gruppi.

Il limite di eccedenza è 150 per i token SAML, 200 per i token JWT, 6 per le applicazioni a pagina singola. Se un utente è membro di più gruppi rispetto al limite di eccedenza, Microsoft Identity Platform non genera gli ID gruppo nell'attestazione dei gruppi nel token. Include invece un'attestazione di eccedenza nel token che indica all'applicazione di eseguire una query sull'API Microsoft Graph per recuperare l'appartenenza al gruppo dell'utente.

Microsoft Entra ID Boot Starter v3.5 e versioni successive analizza automaticamente l'attestazione dei gruppi e aggiunge ogni gruppo all'utente connesso Authorities. Lo starter gestisce automaticamente lo scenario di eccedenza dei gruppi.

Nota

È consigliabile usare la funzionalità di filtro dei gruppi, se possibile, per evitare di incorrere in eccedenze di gruppo. Per altre informazioni, vedere la sezione Configurare l'applicazione per ricevere i valori delle attestazioni dei gruppi da un set filtrato di gruppi a cui potrebbe essere assegnato un utente.

Creare lo scenario di eccedenza per i test

È possibile usare il file BulkCreateGroups.ps1 fornito nella cartella AppCreationScripts per creare un numero elevato di gruppi e assegnare loro utenti. Questo file consente di testare gli scenari di eccedenza durante lo sviluppo. Ricordarsi di modificare l'elemento fornito dall'utente objectId nello script BulkCreateGroups.ps1 .

La gestione dell'eccedenza richiede una chiamata a Microsoft Graph per leggere le appartenenze ai gruppi dell'utente connesso, pertanto l'app deve disporre delle autorizzazioni User.Read e GroupMember.Read.All per l'esecuzione corretta della funzione getMemberGroups.

Importante

Per lo scenario di eccedenza, assicurarsi di aver concesso Admin Consent l'ambito dell'API GroupMember.Read.All Microsoft Graph per le app client e di servizio. Per altre informazioni, vedere i passaggi di registrazione dell'app in precedenza in questo articolo.

Aggiornare la registrazione dell'app Microsoft Entra ID (java-spring-webapp-groups)

Per aggiornare la registrazione dell'app, seguire questa procedura:

  1. Ritornare al portale di Azure.

  2. Nel riquadro di spostamento selezionare Azure Active Directory e quindi selezionare Registrazioni app (anteprima).

  3. Nella schermata risultante selezionare l'applicazione java-spring-webapp-groups .

  4. Nella pagina di registrazione dell'app selezionare Autenticazione dal menu.

  5. Nella sezione URI di reindirizzamento aggiornare gli URL di risposta in modo che corrispondano all'URL del sito della distribuzione di Azure, https://java-spring-webapp-groups.azurewebsites.net/login/oauth2/code/ad esempio .

Importante

Se l'app usa memoria, Azure App Services disattiva il sito Web se è inattivo e tutti i record che l'app stava mantenendo vengono svuotati. Inoltre, se si aumenta il numero di istanze del sito Web, le richieste vengono distribuite tra le istanze. Di conseguenza, i record delle app non sono uguali in ogni istanza.

Ulteriori informazioni

Per altre informazioni sul funzionamento dei protocolli OAuth 2.0 in questo scenario e in altri scenari, vedere Scenari di autenticazione per Microsoft Entra ID.