
Sempre più aziende decidono di pubblicare le proprie applicazioni mediante Azure Application Proxy al posto di esporle direttamente su internet.
Questa funzionalità di Azure permette di richiedere di l’autenticazione mediante Microsoft Entra prima di poter contattare l’applicazione, in modo da garantire standard di sicurezza elevati come ad esempio l’adozione di MFA.
Di default circa ogni ora il proxy richiede all’utente di autenticarsi nuovamente, per evitargli questo disagio è possibile modificare la durata del “access token” mediante Graph API.
Questa modifica ha un impatto diverso rispetto a configurare una Conditional Access Policy per impostare la frequenza di Log-in, che invece sarebbe il metodo consigliato da Microsoft per stabilire la durata del “refresh token” e del “session token”.
Il “refresh token” e il “session token” servono rispettivamente per richiedere un nuovo “access token” e per mantenere la sessione di log-in con Microsoft Entra, tipicamente hanno durata molto più estesa e perciò non hanno nessun impatto sulla validità della sessione con l’Application Proxy.
La stessa procedura mostrata in questo articolo può essere utilizzata per estendere la durata dei token di autenticazione (access token, id token e SAML token) utilizzati dalle app che fanno mezzo di OIDC/OAuth2 o SAML mediante Microsoft Entra.
PREREQUISITI
Prima di poter proseguire è necessario aver installato il modulo di PowerShell Microsoft Graph, se non lo si ha già installato è possibile farlo eseguendo il seguente comando:
| 
					 0  | 
						
Install-Module Microsoft.Graph -Scope CurrentUser
  | 
					
Mediante l’opzione -Scope CurrentUser il modulo viene installato solamente per l’utente corrente, in modo che non siano necessari i privilegi amministrativi.
Se viene mostrato un errore simile al seguente significa che il modulo è già installato:
| 
					 0 
1 
2 
 | 
						
WARNING: Version '2.25.0' of module 'Microsoft.Graph' is already installed at 'C:\Program
 
Files\WindowsPowerShell\Modules\Microsoft.Graph\2.25.0'. To install version '2.32.0', run Install-Module and add the
 
-Force parameter, this command will install version '2.32.0' in side-by-side with version '2.25.0'.
 
 | 
					
AUTENTICAZIONE MEDIANTE GRAPH API
Per poter effettuare le richieste API mostrate in questo articolo è necessario richiedere i seguenti Scopes in fase di autenticazione:
- Policy.ReadWrite.ApplicationConfiguration
 - Policy.Read.All
 - Application.ReadWrite.All
 
È possibile assegnare gli scopes ad un applicazione per utilizzare l’autenticazione mediante certificati o secrets, tuttavia verrà mostrato solo come autenticarsi in modo interattivo.
Eseguire il seguente comando ed effettuare il log-in con un utenza con privilegi sufficienti:
| 
					 0  | 
						
Connect-MgGraph -Scopes "Policy.ReadWrite.ApplicationConfiguration","Policy.Read.All","Application.ReadWrite.All"
  | 
					
Se si volesse accedere come guest ad un tenant esterno, sarebbe necessario specificare il Tenant ID:
| 
					 0  | 
						
Connect-MgGraph -Scopes "Policy.ReadWrite.ApplicationConfiguration","Policy.Read.All","Application.ReadWrite.All" -TenantId $TenantID
  | 
					
Se l’autenticazione va a buon fine, viene mostrato un messaggio simile al seguente:
| 
					 0 
1 
2 
3 
4 
5 
 | 
						
Welcome to Microsoft Graph!
 
Connected via delegated access using xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx
 
Readme: https://aka.ms/graph/sdk/powershell
 
SDK Docs: https://aka.ms/graph/sdk/powershell/docs
 
API Docs: https://aka.ms/graph/docs
 
 | 
					
NOTA BENE: You can use the -NoWelcome parameter to suppress this message.
OBJECT ID DELL’APPLICAZIONE
Al fine di selezionare su quale app si vuole agire mediante Graph API è necessario utilizzare il suo Object ID per identificarla.
L’attributo Object ID è disponibile nella sezione Overview dell’app in App Registration sul portale Microsoft Entra:
Se non fosse possibile trovare l’applicazione su App Registration, sarebbe possibile cercarla mediante PowerShell specificandone il DisplayName (sostituire la variabile $appDisplayName con il nome mostrato su Enterprise App):
| 
					 0  | 
						
Get-MgApplication | Where-Object DisplayName -eq $appDisplayName
  | 
					
L’output del precedente comando è simile al seguente e l’attributo necessario per procedere è Id nella seconda colonna:
| 
					 0 
1 
2 
 | 
						
DisplayName Id AppId SignInAudience PublisherDomain
 
----------- -- ----- -------------- ---------------
 
test-app xxxxxx-xxxx-xxxx-xxxx-xxxxxxxx yyyyyy-yyyy-yyyy-yyyy-yyyyyyyy AzureADMyOrg tenanttest.onmicrosoft.com
 
 | 
					
In questo articolo l’ID dell’applicazione verrà indicato facendo utilizzo della variabile applicationObjectId, per inizializzare la variabile eseguire il seguente comando sostituendo l’ID con quello ottenuto negli step precedenti:
| 
					 0  | 
						
$applicationObjectId = "OBJECT-ID-ENTERPRISE-APP"
  | 
					
CONFIGURAZIONE DELLA POLICY
Per creare la policy eseguire su PowerShell:
| 
					 0 
1 
2 
3 
4 
5 
 | 
						
$params = @{
 
Definition = @('{"TokenLifetimePolicy":{"Version":1,"AccessTokenLifetime":"4:00:00"}}')
 
DisplayName = "WebPolicyScenario"
 
IsOrganizationDefault = $false
 
} 
$tokenLifetimePolicyId=(New-MgPolicyTokenLifetimePolicy -BodyParameter $params).Id
 
 | 
					
Nello script precedente la policy configura una durata di 4 ore (parametro AccessTokenLifetime), è possibile modificare la durata a patto che il valore sia maggiore di 10 minuti e minore di 24 ore.
Nella variabile tokenLifetimePolicyId viene salvato l’ID della policy ed è possibile visualizzarla eseguendo:
| 
					 0  | 
						
Get-MgPolicyTokenLifetimePolicy -TokenLifetimePolicyId $tokenLifetimePolicyId
  | 
					
ASSEGNAZIONE DELLA POLICY ALL’APP
Prima di proseguire verificare se sono attive delle policy per l’app, eseguendo il seguente comando:
| 
					 0  | 
						
Get-MgApplicationTokenLifetimePolicy -ApplicationId $applicationObjectId
  | 
					
Se l’output è vuoto significa che non sono attive delle policies, altrimenti è possibile rimuoverle seguendo gli step elencati nel paragrafo successivo.
Per assegnare la policy all’app eseguire:
| 
					 0 
1 
2 
3 
 | 
						
$params = @{
 
"@odata.id" = "https://graph.microsoft.com/v1.0/policies/tokenLifetimePolicies/$tokenLifetimePolicyId"
 
} 
New-MgApplicationTokenLifetimePolicyByRef -ApplicationId $applicationObjectId -BodyParameter $params
 
 | 
					
RIMOZIONE DI UNA POLICY
Se si è a conoscenza di un’app a cui è assegnata la policy da rimuovere, è possibile identificare l’ID della policy eseguendo il seguente comando:
| 
					 0  | 
						
Get-MgApplicationTokenLifetimePolicy -ApplicationId $applicationObjectId
  | 
					
Se invece non fosse possibile identificare un’app a cui è asssegnata la policy, sarebbe possibile elencarle tutte per poi leggere l’ID di quella da rimuovere, per farlo eseguire:
| 
					 0  | 
						Get-MgPolicyTokenLifetimePolicy  | 
					
Il valore dell’ID della policy viene indicato nell’output di entrambi i comandi nella colonna chiamata Id.
Inizializzare la variabile tokenLifetimePolicyId con il valore dell’ID ottenuto con uno dei comandi precedenti:
| 
					 0  | 
						
$tokenLifetimePolicyId = "POLICY-ID"
  | 
					
Per disassegnare la policy ad una specifica app è possibile eseguire il seguente comando:
| 
					 0  | 
						
Remove-MgApplicationTokenLifetimePolicyByRef -ApplicationId $applicationObjectId -TokenLifetimePolicyId $tokenLifetimePolicyId
  | 
					
Successivamente, se non viene utilizzata per altre apps, è possibile rimuovere la policy eseguendo il seguente comando:
| 
					 0  | 
						
Remove-MgPolicyTokenLifetimePolicy -TokenLifetimePolicyId $tokenLifetimePolicyId
  | 
					

0 commenti