Eventi
Creare app e agenti di intelligenza artificiale
17 mar, 21 - 21 mar, 10
Partecipa alla serie meetup per creare soluzioni di intelligenza artificiale scalabili basate su casi d'uso reali con altri sviluppatori ed esperti.
Iscriviti subitoQuesto browser non è più supportato.
Esegui l'aggiornamento a Microsoft Edge per sfruttare i vantaggi di funzionalità più recenti, aggiornamenti della sicurezza e supporto tecnico.
Questo articolo illustra un'app Java Tomcat che consente agli utenti di accedere al tenant di Microsoft Entra ID usando Microsoft Authentication Library (MSAL) per Java.
Il diagramma seguente illustra la topologia dell'app:
Diagramma che mostra la topologia dell'app.
L'app client usa MSAL per Java (MSAL4J) per consentire agli utenti di accedere al proprio tenant microsoft Entra ID e ottenere un token ID da Microsoft Entra ID. Il token ID dimostra che un utente è autenticato con questo tenant. L'app protegge le route in base allo stato di autenticazione dell'utente.
Le sezioni seguenti illustrano come configurare l'applicazione 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 3-java-servlet-web-app/1-Authentication/sign-in
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.
In questo esempio è presente un progetto. Questa sezione illustra come registrare l'app.
Prima di tutto, registrare l'app nel portale di Azure seguendo le istruzioni riportate in Avvio rapido: Registrare un'applicazione con Microsoft Identity Platform.
Usare quindi la procedura seguente per completare la registrazione:
Passare alla pagina Registrazioni app di Microsoft Identity Platform per sviluppatori.
Seleziona Nuova registrazione.
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-servlet-webapp-authentication
ad esempio .
In Tipi di account supportati selezionare una delle opzioni seguenti:
Nella sezione URI di reindirizzamento selezionare Web nella casella combinata e immettere l'URI di reindirizzamento seguente: http://localhost:8080/msal4j-servlet-auth/auth/redirect
.
Selezionare Registra per creare l'applicazione.
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.
Nella pagina di registrazione dell'app selezionare Certificati e segreti nel riquadro di spostamento per aprire la pagina per generare segreti e caricare i certificati.
Nella sezione Segreti client seleziona Nuovo segreto client.
Digitare una descrizione, ad esempio il segreto dell'app.
Selezionare una delle durate disponibili: in 1 anno, in 2 anni o Mai scadute.
Selezionare Aggiungi. Viene visualizzato il valore generato.
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.
Usare la procedura seguente per configurare l'app:
Nota
Nei passaggi seguenti è ClientID
uguale Application ID
a o AppId
.
Aprire il progetto nell'IDE.
Aprire il file ./src/main/resources/authentication.properties .
Trovare la stringa {enter-your-tenant-id-here}
. Sostituire il valore esistente con uno dei valori seguenti:
organizations
se hai registrato l'app con l'opzione Account in qualsiasi directory organizzativa.common
se hai registrato l'app con l'opzione Account in qualsiasi directory organizzativa e account Microsoft personali.consumers
se hai registrato l'app con l'opzione Account Microsoft personali.Trovare la stringa {enter-your-client-id-here}
e sostituire il valore esistente con l'ID applicazione o clientId
l'applicazione java-servlet-webapp-authentication
copiata dal portale di Azure.
Trovare la stringa {enter-your-client-secret-here}
e sostituire il valore esistente con il valore salvato durante la creazione dell'appjava-servlet-webapp-authentication
, nella portale di Azure.
Per compilare l'esempio usando Maven, passare alla directory contenente il file pom.xml per l'esempio e quindi eseguire il comando seguente:
mvn clean package
Questo comando genera un file con estensione war che è possibile eseguire in vari server applicazioni.
Le sezioni seguenti illustrano come distribuire l'esempio in app Azure Servizio.
Plug-in Maven per app del servizio app Azure
Se Maven non è lo strumento di sviluppo preferito, vedere le esercitazioni simili seguenti che usano altri strumenti:
Quando si esegue la distribuzione in app Azure Servizio, la distribuzione usa automaticamente le credenziali di Azure dall'interfaccia della riga di comando di Azure. Se l'interfaccia della riga di comando di Azure non è installata in locale, il plug-in Maven esegue l'autenticazione con OAuth o con l'accesso del dispositivo. Per altre informazioni, vedere Autenticazione con i plug-in Maven.
Per configurare il plug-in, seguire questa procedura:
Eseguire il comando seguente per configurare la distribuzione. Questo comando consente di configurare il sistema operativo del servizio app Azure, la versione Java e la versione di Tomcat.
mvn com.microsoft.azure:azure-webapp-maven-plugin:2.13.0:config
Per Crea nuova configurazione di esecuzione, premere Y, quindi premere INVIO.
Per Definisci valore per il sistema operativo, premere 1 per Windows o 2 per Linux, quindi premere INVIO.
Per Definisci valore per javaVersion, premere 2 per Java 11 e quindi premere INVIO.
Per Definisci valore per webContainer, premere 4 per Tomcat 9.0, quindi premere INVIO.
Per Definisci valore per pricingTier, premere INVIO per selezionare il livello P1v2 predefinito.
Per Conferma premere Y, quindi premere INVIO.
L'esempio seguente mostra l'output del processo di distribuzione:
Please confirm webapp properties
AppName : msal4j-servlet-auth-1707209552268
ResourceGroup : msal4j-servlet-auth-1707209552268-rg
Region : centralus
PricingTier : P1v2
OS : Linux
Java Version: Java 11
Web server stack: Tomcat 9.0
Deploy to slot : false
Confirm (Y/N) [Y]: [INFO] Saving configuration to pom.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 37.112 s
[INFO] Finished at: 2024-02-06T08:53:02Z
[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 app Azure Servizio.
La parte pertinente del file pom.xml dovrebbe essere simile all'esempio seguente:
<build>
<plugins>
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>>azure-webapp-maven-plugin</artifactId>
<version>x.xx.x</version>
<configuration>
<schemaVersion>v2</schemaVersion>
<resourceGroup>your-resourcegroup-name</resourceGroup>
<appName>your-app-name</appName>
...
</configuration>
</plugin>
</plugins>
</build>
È possibile modificare le configurazioni per servizio app direttamente nel 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'app. |
appName |
true | Nome dell'app. |
region |
false | Area in cui ospitare l'app. Il valore predefinito è centralus . Per le aree valide, vedere Aree supportate. |
pricingTier |
false | Piano tariffario per l'app. Il valore predefinito è P1v2 per un carico di lavoro di produzione. Il valore minimo consigliato per lo sviluppo e il test Java è B2 . Per altre informazioni, vedere Prezzi di servizio app. |
runtime |
false | Configurazione dell'ambiente di runtime. Per altre informazioni, vedere Dettagli della configurazione. |
deployment |
false | Configurazione della distribuzione. Per altre informazioni, vedere Dettagli della 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 del servizio app Azure, vedere App di Azure: Dettagli configurazione.
Assicurarsi di salvare i appName
valori e resourceGroup
per usarli in un secondo momento.
Quando si distribuisce l'applicazione in servizio app, l'URL di reindirizzamento viene modificato nell'URL di reindirizzamento dell'istanza dell'app distribuita. Usare la procedura seguente per modificare queste impostazioni nel file delle proprietà:
Passare al file authentication.properties dell'app e modificare il valore di app.homePage
in base al nome di dominio dell'app distribuita, come illustrato nell'esempio seguente. Ad esempio, se si sceglie example-domain
per il nome dell'app nel passaggio precedente, è ora necessario usare https://example-domain.azurewebsites.net
per il app.homePage
valore . Assicurarsi di aver modificato anche il protocollo da http
a https
.
# app.homePage is by default set to dev server address and app context path on the server
# for apps deployed to azure, use https://your-sub-domain.azurewebsites.net
app.homePage=https://<your-app-name>.azurewebsites.net
Dopo aver salvato questo file, usare il comando seguente per ricompilare l'app:
mvn clean package
Importante
In questo stesso file authentication.properties è disponibile un'impostazione per .aad.secret
Non è consigliabile distribuire questo valore in servizio app. Nessuno dei due è consigliabile lasciare questo valore nel codice e potenzialmente eseguirne il push nel repository Git. Per rimuovere questo valore segreto dal codice, è possibile trovare indicazioni più dettagliate nella sezione Deploy to servizio app - Remove secret (Distribuisci in servizio app - Rimuovi segreto). Questo materiale sussidiario aggiunge passaggi aggiuntivi per il push del valore del segreto in Key Vault e per l'uso dei riferimenti all'insieme di credenziali delle chiavi.
Poiché l'URI di reindirizzamento cambia nell'app distribuita in app Azure Servizio, è anche necessario modificare l'URI di reindirizzamento nella registrazione dell'app Microsoft Entra ID. Attenersi alla seguente procedura per apportare questa modifica:
Passare alla pagina Registrazioni app di Microsoft Identity Platform per sviluppatori.
Usare la casella di ricerca per cercare la registrazione dell'app, java-servlet-webapp-authentication
ad esempio .
Aprire la registrazione dell'app selezionandone il nome.
Seleziona Autenticazione dal menu.
Nella sezione URI di reindirizzamento Web - selezionare Aggiungi URI.
Compilare l'URI dell'app, aggiungendo /auth/redirect
, ad esempio . https://<your-app-name>.azurewebsites.net/auth/redirect
Seleziona Salva.
È ora possibile distribuire l'app nel servizio app Azure. Usare il comando seguente per assicurarsi di aver eseguito l'accesso all'ambiente Azure per eseguire la distribuzione:
az login
Con tutta la configurazione pronta nel file pom.xml , è ora possibile usare il comando seguente per distribuire l'app Java in Azure:
mvn package azure-webapp:deploy
Al termine della distribuzione, l'applicazione è pronta in http://<your-app-name>.azurewebsites.net/
. Aprire l'URL con il Web browser locale, in cui verrà visualizzata la pagina iniziale dell'applicazione msal4j-servlet-auth
.
Per esplorare l'esempio, seguire questa procedura:
401: unauthorized
errore anziché le attestazioni del token ID quando l'utente non è autorizzato.Questo esempio illustra come usare MSAL per Java (MSAL4J) per accedere agli utenti nel tenant di Microsoft Entra ID. Se si vuole usare MSAL4J nelle proprie applicazioni, è necessario aggiungerlo ai progetti usando Maven.
Per replicare il comportamento di questo esempio, è possibile copiare il file pom.xml e il contenuto delle cartelle helper e authservlets nella cartella src/main/java/com/microsoft/azuresamples/msal4j . È necessario anche il file authentication.properties . Queste classi e file contengono codice generico che è possibile usare in un'ampia gamma di applicazioni. È anche possibile copiare il resto dell'esempio, ma le altre classi e file vengono compilati in modo specifico per soddisfare l'obiettivo di questo esempio.
La tabella seguente illustra il contenuto della cartella del progetto di esempio:
File/cartella | Descrizione |
---|---|
src/main/java/com/microsoft/azuresamples/msal4j/authwebapp/ | Questa directory contiene le classi che definiscono la logica di business back-end dell'app. |
src/main/java/com/microsoft/azuresamples/msal4j/authservlets/ | Questa directory contiene le classi usate per l'accesso e la disconnessità degli endpoint. |
*Servlet.java | Tutti gli endpoint disponibili sono definiti nelle classi Java con nomi che terminano in Servlet . |
src/main/java/com/microsoft/azuresamples/msal4j/helpers/ | Classi helper per l'autenticazione. |
AuthenticationFilter.java | Reindirizza le richieste non autenticate agli endpoint protetti a una pagina 401. |
src/main/resources/authentication.properties | Microsoft Entra ID e configurazione del programma. |
src/main/webapp/ | Questa directory contiene l'interfaccia utente - Modelli JSP |
CHANGELOG.md | Elenco delle modifiche apportate all'esempio. |
CONTRIBUTING.md | Linee guida per contribuire all'esempio. |
LICENZA | Licenza per l'esempio. |
Viene creata un'istanza ConfidentialClientApplication
nel file AuthHelper.java , come illustrato nell'esempio seguente. Questo oggetto consente di creare l'URL di autorizzazione di Microsoft Entra ID e consente anche di scambiare il token di autenticazione per un token di accesso.
// getConfidentialClientInstance method
IClientSecret secret = ClientCredentialFactory.createFromSecret(SECRET);
confClientInstance = ConfidentialClientApplication
.builder(CLIENT_ID, secret)
.authority(AUTHORITY)
.build();
Per la creazione di istanze vengono usati i parametri seguenti:
In questo esempio questi valori vengono letti dal file authentication.properties usando un lettore di proprietà nel file Config.java .
I passaggi seguenti forniscono una procedura dettagliata delle funzionalità dell'app:
Il primo passaggio del processo di accesso consiste nell'inviare una richiesta all'endpoint per il /authorize
tenant di Microsoft Entra ID. L'istanza DI MSAL4J ConfidentialClientApplication
viene usata per costruire un URL della richiesta di autorizzazione. L'app reindirizza il browser a questo URL, dove l'utente accede.
final ConfidentialClientApplication client = getConfidentialClientInstance();
AuthorizationRequestUrlParameters parameters = AuthorizationRequestUrlParameters.builder(Config.REDIRECT_URI, Collections.singleton(Config.SCOPES))
.responseMode(ResponseMode.QUERY).prompt(Prompt.SELECT_ACCOUNT).state(state).nonce(nonce).build();
final String authorizeUrl = client.getAuthorizationRequestUrl(parameters).toString();
contextAdapter.redirectUser(authorizeUrl);
L'elenco seguente descrive le funzionalità di questo codice:
AuthorizationRequestUrlParameters
: parametri che devono essere impostati per compilare un oggetto AuthorizationRequestUrl.
REDIRECT_URI
: dove Microsoft Entra ID reindirizza il browser, insieme al codice di autenticazione, dopo aver raccolto le credenziali utente. Deve corrispondere all'URI di reindirizzamento nella registrazione dell'app Microsoft Entra ID nel portale di Azure.
SCOPES
: gli ambiti sono autorizzazioni richieste dall'applicazione. In genere, i tre ambiti openid profile offline_access
sono sufficienti per ricevere una risposta del token ID.
È possibile trovare un elenco completo degli ambiti richiesti dall'app nel file authentication.properties . È possibile aggiungere altri ambiti, ad esempio User.Read
.
L'utente riceve una richiesta di accesso da Microsoft Entra ID. Se il tentativo di accesso ha esito positivo, il browser dell'utente viene reindirizzato all'endpoint di reindirizzamento dell'app. Una richiesta valida a questo endpoint contiene un codice di autorizzazione.
L'istanza ConfidentialClientApplication
scambia quindi questo codice di autorizzazione per un token ID e un token di accesso da Microsoft Entra ID.
// First, validate the state, then parse any error codes in response, then extract the authCode. Then:
// build the auth code params:
final AuthorizationCodeParameters authParams = AuthorizationCodeParameters
.builder(authCode, new URI(Config.REDIRECT_URI)).scopes(Collections.singleton(Config.SCOPES)).build();
// Get a client instance and leverage it to acquire the token:
final ConfidentialClientApplication client = AuthHelper.getConfidentialClientInstance();
final IAuthenticationResult result = client.acquireToken(authParams).get();
L'elenco seguente descrive le funzionalità di questo codice:
AuthorizationCodeParameters
: parametri che devono essere impostati per scambiare il codice di autorizzazione per un ID e/o un token di accesso.authCode
: codice di autorizzazione ricevuto nell'endpoint di reindirizzamento.REDIRECT_URI
: l'URI di reindirizzamento usato nel passaggio precedente deve essere passato di nuovo.SCOPES
: gli ambiti usati nel passaggio precedente devono essere passati di nuovo.Se acquireToken
ha esito positivo, vengono estratte le attestazioni del token. Se il controllo nonce viene superato, i risultati vengono inseriti in context
, un'istanza di IdentityContextData
, e salvati nella sessione. L'applicazione può quindi creare un'istanza IdentityContextData
di dalla sessione tramite un'istanza di IdentityContextAdapterServlet
ogni volta che deve accedervi, come illustrato nel codice seguente:
// parse IdToken claims from the IAuthenticationResult:
// (the next step - validateNonce - requires parsed claims)
context.setIdTokenClaims(result.idToken());
// if nonce is invalid, stop immediately! this could be a token replay!
// if validation fails, throws exception and cancels auth:
validateNonce(context);
// set user to authenticated:
context.setAuthResult(result, client.tokenCache().serialize());
Per informazioni su come l'app di esempio filtra l'accesso alle route, vedere AuthenticationFilter.java. Nel file authentication.properties la app.protect.authenticated
proprietà contiene le route separate da virgole a cui possono accedere solo gli utenti autenticati, come illustrato nell'esempio seguente:
# for example, /token_details requires any user to be signed in and does not require special roles claim(s)
app.protect.authenticated=/token_details
Gli ambiti indicano a Microsoft Entra ID il livello di accesso richiesto dall'applicazione.
In base agli ambiti richiesti, Microsoft Entra ID presenta una finestra di dialogo di consenso all'utente al momento dell'accesso. Se l'utente acconsente a uno o più ambiti e ottiene un token, gli ambiti con consenso vengono codificati nell'oggetto risultante access_token
.
Per gli ambiti richiesti dall'applicazione, vedere authentication.properties. Questi tre ambiti vengono richiesti da MSAL e forniti da Microsoft Entra ID per impostazione predefinita.
Eventi
Creare app e agenti di intelligenza artificiale
17 mar, 21 - 21 mar, 10
Partecipa alla serie meetup per creare soluzioni di intelligenza artificiale scalabili basate su casi d'uso reali con altri sviluppatori ed esperti.
Iscriviti subitoFormazione
Modulo
Accedere agli utenti con l'Microsoft Entra ID in un'app Web Java - Training
Informazioni su come autenticare gli utenti con Microsoft Entra ID e ottenere l'accesso autorizzato ai dati in un'app Web Java usando Microsoft Authentication Library.
Certificazione
Microsoft Certified: Identity and Access Administrator Associate - Certifications
Illustrare le funzionalità di Microsoft Entra ID per modernizzare le soluzioni di identità, implementare soluzioni ibride e implementare la governance delle identità.