Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo illustra come proteggere le applicazioni Red Hat Quarkus con l'ID Microsoft Entra usando OpenID Connect (OIDC).
In questo articolo vengono illustrate le operazioni seguenti:
- Configurare un provider OpenID Connect con Microsoft Entra ID.
- Proteggere un'app Quarkus usando OpenID Connect.
- Eseguire e testare l'app Quarkus.
Prerequisiti
- Una sottoscrizione di Azure. Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
- Un'identità di Azure con almeno il ruolo Amministratore applicazioni cloud Microsoft Entra. Per altre informazioni, vedere Elencare le assegnazioni di ruolo di Microsoft Entra e i ruoli predefiniti di Microsoft Entra.
- Un tenant di Microsoft Entra. Se non si ha un tenant esistente, vedere Avvio rapido: Configurare un tenant.
- Un computer locale con un sistema operativo simile a Unix installato, ad esempio Ubuntu, macOS o sottosistema Windows per Linux.
- Git.
- Implementazione di Java SE, versione 21 o successiva, ad esempio la build Microsoft di OpenJDK.
- Maven, versione 3.9.3 o successiva.
Configurare un provider OpenID Connect con Microsoft Entra ID
In questa sezione viene configurato un provider OpenID Connect con Microsoft Entra ID da usare con l'app Quarkus. In una sezione successiva si configura l'app Quarkus usando OpenID Connect per autenticare e autorizzare gli utenti nel tenant di Microsoft Entra.
Creare utenti nel tenant di Microsoft Entra
Prima di tutto, creare due utenti nel tenant di Microsoft Entra seguendo la procedura descritta in Come creare, invitare ed eliminare utenti. È sufficiente la sezione Crea un nuovo utente . Usare le istruzioni seguenti durante l'articolo, quindi tornare a questo articolo dopo aver creato gli utenti nel tenant di Microsoft Entra.
Per creare un utente da usare come "amministratore" nell'app, seguire questa procedura:
- Quando si raggiunge la scheda Informazioni di base nella sezione Crea un nuovo utente , seguire questa procedura:
Per Nome entità utente immettere admin. Salvare il valore in modo da poterlo usare in un secondo momento quando si accede all'app.
Per Nome alternativo posta selezionare Deriva dal nome dell'entità utente
Per Nome visualizzato immettere Admin.
Per Password selezionare Genera automaticamente la password. Copiare e salvare il valore password da usare in un secondo momento quando si accede all'app.
Selezionare Account abilitato.
Selezionare Rivedi e crea>Crea. Attendere fino a quando l'utente non viene creato.
Attendere un minuto o così via e selezionare Aggiorna. Verrà visualizzato il nuovo utente nell'elenco.
Per creare un utente da usare come "utente" nell'app, ripetere questi passaggi, ma usare i valori seguenti:
- In Nome entità utente immettere user.
- In Nome visualizzato immettere User.
Registrare un’applicazione in Microsoft Entra ID
Registrare quindi un'applicazione seguendo la procedura descritta in Avvio rapido: Registrare un'applicazione con Microsoft Identity Platform. Usare le istruzioni seguenti durante l'articolo, quindi tornare a questo articolo dopo la registrazione e la configurazione dell'applicazione.
- Quando si raggiunge la sezione Registra un'applicazione , seguire questa procedura:
- Per Tipi di account supportati selezionare Account solo in questa directory organizzativa (solo directory predefinita - Tenant singolo).
- Al termine della registrazione, salvare i valori ID applicazione (client) e ID directory (tenant) da usare in un secondo momento nella configurazione dell'app.
- Quando si raggiunge la sezione Aggiungi un URI di reindirizzamento, ignorare i passaggi per il momento. Aggiungere l'URI di reindirizzamento in un secondo momento quando si esegue e si testa l'app di esempio in locale in questo articolo.
- Quando si raggiunge la sezione Aggiungi credenziali , selezionare la scheda Aggiungi un segreto client.
- Quando si aggiunge un segreto client, annotare il valore del segreto client da usare in un secondo momento nella configurazione dell'app.
Aggiungere i ruoli dell'app all'applicazione
Aggiungere quindi i ruoli dell'app all'applicazione seguendo la procedura descritta in Aggiungere ruoli dell'app all'applicazione e riceverli nel token. Sono necessarie solo le sezioni Dichiarare i ruoli per un'applicazione e Assegnare utenti e gruppi ai ruoli di Microsoft Entra. Usare le istruzioni seguenti durante l'articolo, quindi tornare a questo articolo dopo aver dichiarato i ruoli per l'applicazione.
Quando si raggiunge la sezione Dichiara ruoli per un'applicazione , usare l'interfaccia utente Ruoli app per creare ruoli per l'amministratore e l'utente normale.
Creare un ruolo utente amministratore usando i valori seguenti:
- Per Nome visualizzato immettere Admin.
- In Tipi di membri consentiti selezionare Utenti/Gruppi.
- Per Valore immettere admin.
- Per Descrizione immettere Admin.For Description, enter Admin.
- Selezionare Vuoi abilitare questo ruolo dell'app?
Selezionare Applica. Attendere la creazione del ruolo.
Creare un ruolo utente normale usando gli stessi passaggi, ma con i valori seguenti:
- In Nome visualizzato immettere User.
- In Valore immettere user.
- Per Descrizione immettere User.
Quando si raggiunge la sezione Assegnare utenti e gruppi ai ruoli di Microsoft Entra, seguire questa procedura:
Selezionare Aggiungi utente/gruppo.
Nel riquadro Aggiungi assegnazione selezionare Amministratore utente e selezionare Amministratore ruolo per Selezionare un ruolo. Selezionare quindi Assegna. Attendere che l'assegnazione dell'applicazione abbia esito positivo. Potrebbe essere necessario scorrere la tabella lateralmente per visualizzare la colonna Role assigned .
Ripetere i passaggi precedenti per assegnare il ruolo Utente all'utente.
Selezionare Aggiorna e verranno visualizzati gli utenti e i ruoli assegnati nel riquadro Utenti e gruppi .
Potrebbe essere necessario modificare la larghezza delle intestazioni di colonna per fare in modo che la visualizzazione sia simile all'immagine.
Non seguire altri passaggi in Aggiungere ruoli dell'app all'applicazione e riceverli nel token.
Proteggere un'app Quarkus usando OpenID Connect
In questa sezione si protegge un'app Quarkus che autentica e autorizza gli utenti nel tenant di Microsoft Entra usando OpenID Connect. Si apprenderà anche come concedere agli utenti l'accesso a determinate parti dell'app usando il controllo degli accessi in base al ruolo.
L'app Quarkus di esempio per questa guida introduttiva si trova in GitHub nel repository quarkus-azure e si trova nella directory entra-id-quarkus .
Abilitare l'autenticazione e l'autorizzazione per proteggere l'app
L'app ha una risorsa della pagina iniziale definita in WelcomePage.java, come illustrato nel codice di esempio seguente. Questa pagina è accessibile agli utenti non autenticati. Il percorso radice della pagina di benvenuto si trova in /
.
@Path("/")
public class WelcomePage {
private final Template welcome;
public WelcomePage(Template welcome) {
this.welcome = requireNonNull(welcome, "welcome page is required");
}
@GET
@Produces(MediaType.TEXT_HTML)
public TemplateInstance get() {
return welcome.instance();
}
}
Dalla pagina iniziale gli utenti possono accedere all'app per accedere alla pagina del profilo. La pagina iniziale contiene collegamenti per accedere come utente o come amministratore. I collegamenti si trovano rispettivamente in /profile/user
e /profile/admin
. L'interfaccia utente della pagina iniziale è definita in welcome.qute.html e mostrata nell'esempio seguente:
<html>
<head>
<meta charset="UTF-8">
<title>Greeting</title>
</head>
<body>
<h1>Hello, welcome to Quarkus and Microsoft Entra ID integration!</h1>
<h1>
<a href="/profile/user">Sign in as user</a>
</h1>
<h1>
<a href="/profile/admin">Sign in as admin</a>
</h1>
</body>
</html>
Sia /profile/user
che /profile/admin
i collegamenti puntano alla risorsa della pagina del profilo, definita in ProfilePage.java, come illustrato nel codice di esempio seguente. Questa pagina è accessibile solo agli utenti autenticati usando l'annotazione @RolesAllowed("**")
del jakarta.annotation.security.RolesAllowed
pacchetto. L'annotazione @RolesAllowed("**")
specifica che solo gli utenti autenticati possono accedere al /profile
percorso.
@Path("/profile")
@RolesAllowed("**")
public class ProfilePage {
private final Template profile;
@Inject
SecurityIdentity identity;
@Inject
JsonWebToken accessToken;
public ProfilePage(Template profile) {
this.profile = requireNonNull(profile, "profile page is required");
}
@Path("/admin")
@GET
@Produces(MediaType.TEXT_HTML)
@RolesAllowed("admin")
public TemplateInstance getAdmin() {
return getProfile();
}
@Path("/user")
@GET
@Produces(MediaType.TEXT_HTML)
@RolesAllowed({"user","admin"})
public TemplateInstance getUser() {
return getProfile();
}
private TemplateInstance getProfile() {
return profile
.data("name", identity.getPrincipal().getName())
.data("roles", identity.getRoles())
.data("scopes", accessToken.getClaim("scp"));
}
}
La risorsa della pagina del profilo abilita il controllo degli accessi in base al ruolo usando l'annotazione @RolesAllowed
. Gli argomenti dell'annotazione @RolesAllowed
specificano che solo gli utenti con il admin
ruolo possono accedere al /profile/admin
percorso e gli utenti con il user
ruolo o admin
possono accedere al /profile/user
percorso.
Sia gli /profile/admin
endpoint che /profile/user
restituiscono la pagina del profilo. L'interfaccia utente della pagina del profilo è definita in profile.qute.html, come illustrato nell'esempio seguente. In questa pagina vengono visualizzati il nome, i ruoli e gli ambiti dell'utente. La pagina del profilo include anche un collegamento di disconnessione in /logout
, che reindirizza l'utente al provider OIDC per disconnettersi. La pagina del profilo viene scritta usando il motore di creazione modelli Qute. Si noti l'uso di {}
espressioni nella pagina. Queste espressioni usano i valori passati all'oggetto TemplateInstance
utilizzando il data()
metodo . Per altre informazioni su Qute, vedere Qute templating engine .For more information on Qute templating engine.
<html>
<head>
<meta charset="UTF-8">
<title>Profile</title>
</head>
<body>
<h1>Hello, {name}</h1>
<h2>Roles</h2>
<ul>
{#if roles}
{#for role in roles}
<li>{role}</li>
{/for}
{#else}
<li>No roles found!</li>
{/if}
</ul>
<h2>Scopes</h2>
<p>
{scopes}
</p>
<h1>
<b><a href="/logout">Sign out</a></b>
</h1>
</body>
</html>
Dopo la disconnessione, l'utente viene reindirizzato alla pagina di benvenuto e può accedere di nuovo.
Eseguire e testare l'app Quarkus
In questa sezione si esegue e si testa l'app Quarkus per vedere come funziona con Microsoft Entra ID come provider OpenID Connect.
Aggiungere un URI di reindirizzamento alla registrazione dell'app
Per eseguire e testare correttamente l'app in locale, è necessario aggiungere un URI di reindirizzamento alla registrazione dell'app. Seguire le istruzioni nella sezione Aggiungere un URI di reindirizzamento di Avvio rapido: Registrare un'applicazione con Microsoft Identity Platform e usare i valori seguenti:
- Per Configura piattaforme selezionare Web.
- Per URI di reindirizzamento immettere
http://localhost:8080
.
Preparare l'esempio
Usare la procedura seguente per preparare l'app Quarkus di esempio:
Usare i comandi seguenti per clonare l'app Quarkus di esempio da GitHub e passare alla directory entra-id-quarkus:
git clone https://github.com/Azure-Samples/quarkus-azure cd quarkus-azure/entra-id-quarkus git checkout 2024-09-26
Se visualizzi un messaggio relativo allo stato HEAD scollegato, questo messaggio è sicuro da ignorare. Poiché questo articolo non richiede commit, lo stato HEAD scollegato è appropriato.
Usare i comandi seguenti per definire le variabili di ambiente seguenti con i valori annoti in precedenza:
export QUARKUS_OIDC_CLIENT_ID=<application/client-ID> export QUARKUS_OIDC_CREDENTIALS_SECRET=<client-secret> export QUARKUS_OIDC_AUTH_SERVER_URL=https://login.microsoftonline.com/<directory/tenant-ID>/v2.0
Queste variabili di ambiente forniscono i valori per il supporto predefinito di OpenID Connect in Quarkus. Le proprietà corrispondenti in
application.properties
sono illustrate nell'esempio seguente.quarkus.oidc.client-id= quarkus.oidc.credentials.secret= quarkus.oidc.auth-server-url=
Se il valore di una proprietà è vuoto in
application.properties
, Quarkus converte il nome della proprietà in una variabile di ambiente e legge il valore dall'ambiente. Per informazioni dettagliate sulla conversione dei nomi, vedere la specifica di Configurazione microProfile.
Eseguire l'app Quarkus
È possibile eseguire l'app Quarkus in modalità diverse. Selezionare uno dei metodi seguenti per eseguire l'app Quarkus. Per consentire a Quarkus di connettersi all'ID di Microsoft Entra, assicurarsi di eseguire il comando nella shell in cui sono state definite le variabili di ambiente illustrate nella sezione precedente.
Eseguire l'app Quarkus in modalità di sviluppo:
mvn quarkus:dev
Eseguire l'app Quarkus in modalità JVM:
mvn install java -jar target/quarkus-app/quarkus-run.jar
Eseguire l'app Quarkus in modalità nativa:
mvn install -Dnative -Dquarkus.native.container-build ./target/quarkus-ad-1.0.0-SNAPSHOT-runner
Se vuoi provare diverse modalità, usa CTRL+C per arrestare l'app Quarkus e quindi esegui l'app Quarkus in un'altra modalità.
Testare l'app Quarkus
Dopo aver eseguito l'app Quarkus, aprire un Web browser con una scheda privata e passare a http://localhost:8080
. Verrà visualizzata la pagina iniziale con collegamenti per accedere come utente o come amministratore. L'uso di una scheda privata consente di evitare di inquinare qualsiasi attività esistente di Microsoft Entra ID nel browser normale.
Raccogliere le credenziali per i due utenti
In questo articolo, Microsoft Entra ID usa l'indirizzo di posta elettronica di ogni utente come ID utente per l'accesso. Usare la procedura seguente per ottenere l'indirizzo di posta elettronica per l'utente amministratore e l'utente normale:
- Accedere all'Interfaccia di amministrazione di Microsoft Entra almeno come Amministratore applicazione cloud.
- Se si ha accesso a più tenant, usare l'icona Impostazioni (
) nel menu in alto per passare al tenant in cui si vuole registrare l'applicazione dal menu Directory e sottoscrizioni.
- Passare a Identity Users All Users .Browse to >.
- Individuare l'utente amministratore nell'elenco e selezionarlo.
- Individuare il campo Nome entità utente.
- Usare l'icona di copia accanto al valore del campo per salvare l'indirizzo di posta elettronica dell'utente negli Appunti. Salvare il valore per usarlo in un secondo momento.
- Per ottenere l'indirizzo di posta elettronica per l'utente normale, seguire la stessa procedura.
Usare le password per l'utente amministratore e l'utente normale impostati durante la creazione degli utenti.
Esercizio della funzionalità dell'app
Per eseguire l'esercizio delle funzionalità, seguire questa procedura:
Selezionare il collegamento Accedi come utente . Accedere con l'utente normale creato in precedenza. Dopo l'accesso, Microsoft Entra ID reindirizza l'utente alla pagina del profilo, in cui vengono visualizzati il nome, i ruoli e gli ambiti.
Se è la prima volta che si esegue l'accesso, viene richiesto di aggiornare la password. Seguire le istruzioni per aggiornare la password.
Se viene richiesto all'organizzazione sono necessarie informazioni di sicurezza aggiuntive. Seguire le istruzioni per scaricare e configurare l'app Microsoft Authenticator, è possibile selezionare Chiedi in un secondo momento per continuare il test.
Se viene richiesto l'opzione Autorizzazioni, esaminare le autorizzazioni richieste dall'app. Selezionare Accetta per continuare il test.
Selezionare Disconnetti per disconnettersi dall'app Quarkus. Microsoft Entra ID esegue la disconnessa. Dopo la disconnessione, Microsoft Entra ID reindirizza l'utente alla pagina di benvenuto.
Selezionare il collegamento Accedi come amministratore . Microsoft Entra ID reindirizza l'utente alla pagina di accesso. Accedere con l'utente amministratore creato in precedenza. Dopo l'accesso, Microsoft Entra ID reindirizza l'utente alla pagina del profilo simile, con un ruolo
admin
diverso.Disconnettersi di nuovo e provare ad accedere come amministratore con l'utente normale creato in precedenza. Verrà visualizzato un messaggio di errore perché l'utente normale non ha il
admin
ruolo.
Pulire le risorse
Questo articolo non indirizza la distribuzione dell'app in Azure. Non ci sono risorse di Azure da pulire per l'app, anche se sono presenti risorse id Microsoft Entra. Per distribuire un'app in Azure, è possibile seguire le indicazioni a cui si fa riferimento nella sezione successiva.
Al termine delle risorse per questa app di esempio, seguire questa procedura per pulire le risorse di Microsoft Entra ID. La rimozione delle risorse microsoft Entra ID inutilizzate è una procedura consigliata importante per la sicurezza.
- Rimuovere la registrazione dell'app creata seguendo la procedura descritta in Rimuovere un'applicazione registrata con Microsoft Identity Platform. È sufficiente seguire la procedura descritta nella sezione Rimuovere un'applicazione creata dall'organizzazione.
- L'atto di rimuovere la registrazione dell'app deve anche eliminare l'applicazione aziendale. Per altre informazioni sull'eliminazione di applicazioni aziendali, vedere Eliminare un'applicazione aziendale.
- Eliminare gli utenti creati seguendo la procedura descritta in Come creare, invitare ed eliminare utenti.
Passaggi successivi
In questa guida introduttiva si proteggono le applicazioni Quarkus con Microsoft Entra ID usando OpenID Connect. Per altre informazioni, esplorare le risorse seguenti:
- Distribuire un'applicazione Java con Quarkus in un'app contenitore di Azure
- Autenticazione OpenID Connect con Microsoft Entra ID
- Flusso del codice di autorizzazione OAuth 2.0 e Microsoft Identity Platform
- Proteggere un'applicazione Web usando il flusso del codice di autorizzazione OIDC (OpenId Connect)
- Meccanismo del flusso del codice di autorizzazione OpenID Connect per la protezione delle applicazioni Web
- Proprietà di configurazione OIDC (OpenID Connect)