Condividi tramite


Proteggere le app Java Spring Boot usando ruoli e attestazioni di ruolo

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 l'accesso degli utenti e limita l'accesso ad alcune route usando i ruoli applicazione di Microsoft Entra ID (ruoli dell'app) per l'autorizzazione.

I ruoli dell'app, insieme ai gruppi di sicurezza, sono strumenti comuni per implementare l'autorizzazione. Usando il controllo degli accessi in base al ruolo (RBAC) con ruoli applicazione e attestazioni di ruolo, è possibile applicare in modo sicuro i criteri di autorizzazione con un impegno minimo. Un altro approccio consiste nell'usare i gruppi e le attestazioni di gruppo di Microsoft Entra ID. I gruppi e i ruoli applicazione di Microsoft Entra ID non si escludono a vicenda. È possibile usarli entrambi per fornire un controllo di accesso con granularità fine.

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

Per altre informazioni sul funzionamento dei protocolli in questo scenario e altri scenari, vedere Autenticazione e autorizzazione.

Il diagramma seguente illustra la topologia dell'app:

Diagramma che mostra la topologia dell'app.

L'app usa la libreria client Spring Boot Starter di Microsoft Entra ID per Java per accedere a un utente e ottenere un token ID da Microsoft Entra ID. Il token ID contiene l'attestazione dei ruoli. L'applicazione esamina il valore di questa attestazione per determinare le pagine a cui l'utente è autorizzato ad accedere.

Questo tipo di autorizzazione viene implementato usando il controllo degli accessi in base al ruolo. Con il controllo degli accessi in base al ruolo, un amministratore concede le autorizzazioni ai ruoli, non ai singoli utenti o gruppi. L'amministratore può quindi assegnare ruoli a utenti e gruppi diversi per controllare chi può accedere a determinati contenuti e funzionalità.

Questa applicazione di esempio definisce i due ruoli applicazione seguenti:

  • PrivilegedAdmin: autorizzato ad accedere alle pagine Solo amministratori e Utenti normali.
  • RegularUser: autorizzato ad accedere alla pagina Utenti normali.

Questi ruoli applicazione sono definiti nel portale di Azure all'interno del manifesto di registrazione dell'applicazione. Quando un utente accede all'applicazione, Microsoft Entra ID genera un'attestazione di ruoli per ogni ruolo concesso singolarmente all'utente sotto forma di appartenenza al ruolo.

È possibile assegnare utenti e gruppi ai ruoli tramite il portale di Azure o a livello di codice usando Microsoft Graph e Microsoft Azure AD PowerShell. Questo articolo descrive entrambe le tecniche.

Nota

Le attestazioni di ruolo non sono presenti per gli utenti guest in un tenant se l'endpoint https://login.microsoftonline.com/common/ viene usato come autorità per l'accesso degli utenti. È necessario accedere a un utente a un endpoint tenant come https://login.microsoftonline.com/tenantid.

Prerequisiti

Consigli

  • Una certa familiarità con Spring Framework
  • Familiarità con il terminale Linux/OSX o Windows PowerShell
  • 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/roles

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

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-rolesad 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: in 1 anno, in 2 anni o Mai scadute.

  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.

Definire i ruoli dell'app

Per definire i ruoli dell'app, seguire questa procedura:

  1. Sempre nella stessa registrazione dell'app selezionare Ruoli app nel riquadro di spostamento.

  2. Selezionare Crea ruolo app e quindi immettere i valori seguenti:

    • Per Nome visualizzato immettere un nome appropriato, ad esempio PrivilegedAdmin.
    • In Tipi di membri consentiti scegliere Utente.
    • In Valore immettere PrivilegedAdmin.
    • Per Descrizione immettere PrivilegedAdmins che può visualizzare la pagina di amministrazione.
  3. Selezionare Crea ruolo app e quindi immettere i valori seguenti:

    • Per Nome visualizzato immettere un nome appropriato, ad esempio RegularUser.
    • In Tipi di membri consentiti scegliere Utente.
    • In Valore immettere RegularUser.
    • Per Descrizione immettere RegularUsers che può visualizzare la pagina utente.
  4. Selezionare Applica per salvare le modifiche.

Assegnare utenti ai ruoli dell'app

Per aggiungere utenti al ruolo app definito in precedenza, seguire le linee guida riportate di seguito: Assegnare utenti e gruppi ai ruoli.


Configurare l'app (java-spring-webapp-roles) per usare la registrazione dell'app

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-roles 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-roles copia dalla portale di Azure.

  6. Aprire il file src/main/java/com/microsoft/azuresamples/msal4j/msidentityspringbootapplication/Sample.Controller.java .

  7. Trovare i riferimenti ai PrivilegedAdmin ruoli dell'app e RegularUser in questo file. Se necessario, modificarli in modo da riflettere i nomi dei ruoli dell'app scelti nei passaggi precedenti.

Eseguire l'esempio

Le sezioni seguenti illustrano come distribuire l'esempio in Azure Spring Apps.

Prerequisiti

Preparare il progetto Spring

Per preparare il progetto, seguire questa procedura:

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

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

    mvn spring-boot:run
    

Configurare il plug-in Maven

Eseguire il comando seguente nella radice del progetto per configurare l'app usando il plug-in Maven per Azure Spring Apps:

mvn com.microsoft.azure:azure-spring-apps-maven-plugin:1.19.0:config

L'elenco seguente descrive le interazioni con i comandi:

  • Accesso OAuth2: è necessario autorizzare l'accesso ad Azure in base al protocollo OAuth2.
  • Selezionare la sottoscrizione: selezionare il numero di elenco delle sottoscrizioni in cui si vuole creare l'istanza di Azure Spring Apps, che per impostazione predefinita corrisponde alla prima sottoscrizione nell'elenco. Per usare il numero predefinito, premere INVIO.
  • Immettere il nome di App Spring di Azure: immettere il nome per l'istanza di spring apps che si vuole creare. Per usare il nome predefinito, premere INVIO.
  • Immettere il nome del gruppo di risorse: immettere il nome del gruppo di risorse in cui si vuole creare l'istanza di spring apps. Per usare il nome predefinito, premere INVIO.
  • SKU: selezionare lo SKU da usare per l'istanza di spring apps. Per usare il numero predefinito, premere INVIO.
  • Immettere il nome dell'app (demo): specificare un nome dell'app. Se si vuole usare l'ID artefatto predefinito del progetto, premere INVIO.
  • Runtime: selezionare il runtime che si vuole usare per l'istanza di spring apps. In questo caso, è consigliabile usare il numero predefinito, quindi premere INVIO.
  • Esporre l'accesso pubblico per questa app (boot-for-azure): premere y.
  • Confermare di salvare tutte le configurazioni precedenti: premere y. Se si preme n, la configurazione non viene salvata nel file pom .

L'esempio seguente mostra l'output del processo di distribuzione:

Summary of properties:
Subscription id   : 12345678-1234-1234-1234-123456789101
Resource group name : rg-ms-identity-spring-boot-webapp
Azure Spring Apps name : cluster-ms-identity-spring-boot-webapp
Runtime Java version : Java 11
Region            : eastus
Sku               : Standard
App name          : ms-identity-spring-boot-webapp
Public access     : true
Instance count/max replicas : 1
CPU count         : 1
Memory size(GB)   : 2
Confirm to save all the above configurations (Y/n):
[INFO] Configurations are saved to: /home/user/ms-identity-msal-java-samples/4-spring-web-app/1-Authentication/sign-in/pom.    xml
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  01:57 min
[INFO] Finished at: 2024-02-14T13:50:44Z
[INFO] ------------------------------------------------------------------------

Dopo aver confermato le scelte, il plug-in aggiunge l'elemento e le impostazioni del plug-in necessari al file di pom.xml del progetto per configurare l'app per l'esecuzione in Azure Spring Apps.

La parte pertinente del file pom.xml dovrebbe essere simile all'esempio seguente:

<plugin>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>azure-spring-apps-maven-plugin</artifactId>
    <version>1.19.0</version>
    <configuration>
        <subscriptionId>12345678-1234-1234-1234-123456789101</subscriptionId>
        <resourceGroup>rg-ms-identity-spring-boot-webapp</resourceGroup>
        <clusterName>cluster-ms-identity-spring-boot-webapp</clusterName>
        <region>eastus</region>
        <sku>Standard</sku>
        <appName>ms-identity-spring-boot-webapp</appName>
        <isPublic>true</isPublic>
        <deployment>
            <cpu>1</cpu>
            <memoryInGB>2</memoryInGB>
            <instanceCount>1</instanceCount>
            <runtimeVersion>Java 11</runtimeVersion>
            <resources>
                <resource>
                    <directory>${project.basedir}/target</directory>
                    <includes>
                        <include>*.jar</include>
                    </includes>
                </resource>
            </resources>
        </deployment>
    </configuration>
</plugin>

È possibile modificare le configurazioni per Azure Spring Apps direttamente nel file pom.xml . Alcune configurazioni comuni sono elencate nella tabella seguente:

Proprietà Richiesto Descrizione
subscriptionId false ID della sottoscrizione.
resourceGroup true Gruppo di risorse di Azure per l'istanza di Azure Spring Apps.
clusterName true Nome del cluster di Azure Spring Apps. Se si usa una sottoscrizione e un gruppo di risorse in cui è già distribuita un'istanza di Azure Spring Apps, è anche possibile usare questo cluster esistente per la distribuzione.
appName true Nome dell'app in Azure Spring Apps.
region false Area in cui ospitare l'istanza di Azure Spring Apps. Il valore predefinito è eastus. Per le aree valide, vedere Aree supportate.
sku false Piano tariffario per l'istanza di Azure Spring Apps. Il valore predefinito è Basic, adatto solo per gli ambienti di sviluppo e test.
runtime false Configurazione dell'ambiente di runtime. Per altre informazioni, vedere Dettagli di configurazione.
deployment false Configurazione della distribuzione. Per altre informazioni, vedere Dettagli di configurazione.

Per l'elenco completo delle configurazioni, vedere la documentazione di riferimento sul plug-in. Tutti i plug-in Azure Maven condividono un set comune di configurazioni. Per queste configurazioni, vedere Configurazioni comuni. Per le configurazioni specifiche di Azure Spring Apps, vedere Azure Spring Apps: Configuration Details (App Azure Spring: Dettagli configurazione).

Assicurarsi di salvare i clusterName valori e appName per usarli in un secondo momento.

Preparare l'app per la distribuzione

Quando si distribuisce l'applicazione in Azure Spring Apps, l'URL di reindirizzamento viene modificato nell'URL di reindirizzamento dell'istanza dell'app distribuita in Azure Spring Apps. 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. Ad esempio, se si sceglie cluster-ms-identity-spring-boot-webapp per l'istanza di Azure Spring Apps nel passaggio precedente e ms-identity-spring-boot-webapp per il nome dell'app, è ora necessario usare https://cluster-ms-identity-spring-boot-webapp-ms-identity-spring-boot-webapp.azuremicroservices.io per il post-logout-redirect-uri valore .

    post-logout-redirect-uri: https://<cluster-name>-<app-name>.azuremicroservices.io
    
  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 in un repository Git, è anche possibile che si verifichi un rischio.

Come passaggio di sicurezza aggiuntivo, è possibile archiviare questo valore in Azure Key Vault e caricare il segreto da Key Vault per renderlo disponibile nell'applicazione.

Aggiornare la registrazione dell'app Microsoft Entra ID

Poiché l'URI di reindirizzamento cambia nell'app distribuita in Azure Spring Apps, è 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://<cluster-name>-<app-name>.azuremicroservices.io/login/oauth2/code/

  7. Seleziona Salva.

Distribuire l'app

Usare il comando seguente per distribuire l'app:

mvn azure-spring-apps:deploy

L'elenco seguente descrive l'interazione con il comando:

  • Accesso OAuth2: è necessario autorizzare l'accesso ad Azure in base al protocollo OAuth2.

Dopo l'esecuzione del comando, è possibile visualizzare i messaggi di log seguenti che la distribuzione ha avuto esito positivo:

[INFO] Deployment(default) is successfully created
[INFO] Starting Spring App after deploying artifacts...
[INFO] Deployment Status: Running
[INFO]   InstanceName:demo-default-x-xxxxxxxxxx-xxxxx  Status:Running Reason:null       DiscoverStatus:UNREGISTERED
[INFO]   InstanceName:demo-default-x-xxxxxxxxx-xxxxx  Status:Terminating Reason:null       DiscoverStatus:UNREGISTERED
[INFO] Getting public url of app(demo)...
[INFO] Application url: https://<your-Azure-Spring-Apps-instance-name>-demo.azuremicroservices.io

Convalidare l'app

Al termine della distribuzione, accedere all'applicazione con l'URL dell'applicazione di output. 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 Azure Spring Apps 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 ruoli.
  8. Selezionare Solo amministratori per visualizzare ./admin_only Solo gli utenti con ruolo PrivilegedAdmin app 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 con ruolo RegularUser app o PrivilegedAdmin 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 dei ruoli 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 ruoli nel token ID

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

{
  ...
  "roles": [
    "PrivilegedAdmin",
    "RegularUser",]
  ...
}

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

Microsoft Entra ID Boot Starter v3.3 e versioni successive analizza anche l'attestazione dei ruoli automaticamente e aggiunge ogni ruolo all'utente Authoritiesconnesso, anteponendo ognuna con la stringa APPROLE_. Questa configurazione consente agli sviluppatori di usare i ruoli dell'app 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('APPROLE_PrivilegedAdmin')")
public String adminOnly(Model model) {
    // restrict to users who have PrivilegedAdmin app role only
}
@GetMapping(path = "/regular_user")
@PreAuthorize("hasAnyAuthority('APPROLE_PrivilegedAdmin','APPROLE_RegularUser')")
public String regularUser(Model model) {
    // restrict to users who have any of RegularUser or PrivilegedAdmin app roles
}

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 dalla 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.
    }
}

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.