Condividi tramite


Gestire i token di accesso personale tramite l'API REST

Servizi di Azure DevOps

Quando si ha a che fare con un ampio set di token di accesso personale si è proprietari, potrebbe diventare complesso gestire la manutenzione di questi token usando l'interfaccia utente da sola.

Con l'API di gestione del ciclo di vita del token di accesso personale, è possibile gestire facilmente i token di accesso personale associati alle organizzazioni usando processi automatizzati. Questo set completo di API consente di gestire i PAT, permettendo di creare nuovi PAT e di rinnovare o far scadere quelli esistenti.

In questo articolo viene illustrato come configurare un'applicazione che esegue l'autenticazione con un token Microsoft Entra ed effettua chiamate con l'API PAT Lifecycle.

Importante

Non è possibile usare entità servizio o identità gestite per creare o revocare LET.

Prerequisiti

A differenza di altre API di Azure DevOps Services, gli utenti devono fornire un token di accesso Microsoft Entra per usare questa API. Data la possibilità di questa API di creare e revocare i token PAT, vogliamo assicurarci che questa potente funzionalità sia disponibile solo per token Microsoft Entra più sicuri.

Per acquisire e aggiornare i token di accesso di Microsoft Entra, è necessario eseguire le operazioni seguenti:

Importante

Soluzioni "on-behalf-of application", ad esempio il flusso "credenziali client" e qualsiasi flusso di autenticazione che non rilascia un token di accesso Microsoft Entra non è valido per l'uso con questa API. Se l'autenticazione a più fattori è abilitata nel tenant di Microsoft Entra, è sicuramente necessario usare il flusso "codice di autorizzazione".

Dopo aver creato un'applicazione con un flusso di autenticazione funzionante per la gestione dei token di Microsoft Entra, è possibile usare questi token per effettuare chiamate all'API di gestione del ciclo di vita PAT.

Per chiamare direttamente l'API, fornire un token di accesso Microsoft Entra come Bearer token nell'intestazione Authorization della richiesta. Per altre informazioni e un elenco completo delle richieste disponibili, vedere le informazioni di riferimento sull'API PAT.

Nella sezione seguente viene illustrato come creare un'app che autentica un utente con un token di accesso Microsoft Entra. L'app usa la Microsoft Authentication Library (MSAL) e chiama la nostra API di gestione del ciclo di vita PAT.

Clonare l'app Web Python Flask

È disponibile un'applicazione Web Python Flask di esempio per questa API che è possibile scaricare in GitHub e configurare l'uso con il tenant di Microsoft Entra e l'organizzazione Azure DevOps. L'applicazione di esempio usa il flusso del codice di autorizzazione MSAL per acquisire un token di accesso Microsoft Entra.

Importante

È consigliabile iniziare a usare l'applicazione Web Python Flask di esempio in GitHub, ma se si preferisce usare un linguaggio o un tipo di applicazione diverso, usare l'opzione Avvio rapido per ricreare un'applicazione di test equivalente.

Dopo aver clonato l'app di esempio, seguire le istruzioni nel file LEGGIMI del repository. ReadME spiega come registrare un'applicazione nel tenant di Microsoft Entra, configurare l'esempio per usare il tenant di Microsoft Entra ed eseguire l'app clonata.

Generare un'applicazione di avvio rapido portale di Azure

È invece possibile generare un'app di esempio con il codice MSAL generato usando l'opzione Avvio rapido nella pagina dell'applicazione in portale di Azure. L'applicazione di test di avvio rapido segue il flusso del codice di autorizzazione, ma esegue questa operazione con un endpoint dell'API Microsoft Graph. Gli utenti devono aggiornare la configurazione dell'applicazione in modo che punti all'endpoint per l'API di gestione del ciclo di vita PAT.

Per seguire questo approccio, seguire le istruzioni di avvio rapido per il tipo di applicazione preferito nella home page della documentazione Sviluppo di MICROSOFT Entra ID. L'esempio seguente viene illustrato con un'app di avvio rapido Python Flask.

  1. Dopo aver registrato l'applicazione in un tenant di Microsoft Entra con una sottoscrizione di Azure attiva, vai all'applicazione registrata in Microsoft Entra ID ->Registrazioni app nel portale di Azure .

    Screenshot che mostra l'ID Microsoft Entra aperto, Le registrazioni dell'app.

  2. Selezionare l'applicazione e passare a Autorizzazioni API.

    Screenshot che mostra la selezione di un'applicazione e il passaggio a Autorizzazioni API.

  3. Selezionare Aggiungi un'autorizzazione e selezionare Azure DevOps -> Selezionare gli ambiti appropriati. In questo caso, le API di gestione del ciclo di vita PAT supportano solo user_impersonation, ma altre API possono richiedere ambiti più granulari disponibili in pagina di riferimento singola di ogni API. Dopo aver selezionato tutti gli scopi, fare clic su Aggiungi autorizzazioni.

    Screenshot che mostra l'aggiunta dell'autorizzazione azure DevOps user_impersonation.

  4. Selezionare Avvio rapido.

  5. Selezionare il tipo di applicazione: per Python Flask selezionare Applicazione Web.

  6. Selezionare la piattaforma dell'applicazione. Per questa esercitazione selezionare Python.

  7. Assicurarsi di soddisfare i prerequisiti necessari, quindi consentire portale di Azure di apportare le modifiche necessarie per configurare l'applicazione. L'URL di risposta è l'URL di reindirizzamento impostato alla creazione dell'applicazione + "/getAToken".

    Screenshot che mostra che consente al portale di Azure di apportare le modifiche necessarie per configurare l'applicazione.

  8. Scaricare l'applicazione Avvio rapido ed estrarre i file.

    Screenshot che mostra il download dell'applicazione di avvio rapido ed estrazione dei file.

  9. Installare i requisiti dell'applicazione ed eseguire l'applicazione per assicurarsi di avere tutte le dipendenze necessarie. L'applicazione viene inizialmente configurata per raggiungere un endpoint nell'API Microsoft Graph. Informazioni su come modificare questo endpoint nell'endpoint di base dell'API PAT Lifecycle Management seguendo le istruzioni di configurazione nella sezione seguente.

    Screenshot che mostra l'installazione dei requisiti dell'applicazione e l'esecuzione dell'applicazione.

Configurare un'applicazione di avvio rapido

Dopo aver scaricato e installato l'applicazione di avvio rapido, l'utente viene configurato per l'uso di un endpoint dell'API di test da Microsoft Graph. Modificare il file di configurazione generato in modo che chiami invece l'API di gestione del ciclo di vita PAT.

Suggerimento

La raccolta e l'organizzazione vengono usate in modo intercambiabile in questi documenti. Se una variabile di configurazione richiede un nome di raccolta, sostituirla con il nome dell'organizzazione.

Eseguire le attività seguenti:

  1. Aggiornare la variabile di configurazione ENDPOINT a https://vssps.dev.azure.com/{YOUR_COLLECTION_NAME_HERE}/_apis/Tokens/Pats?api-version=6.1-preview per le API di gestione del ciclo di vita PAT
  2. Aggiornare la variabile di configurazione SCOPE a "499b84ac-1321-427f-aa17-267ca6975798/.default" per fare riferimento alla risorsa Azure DevOps e a tutti i relativi ambiti.

L'esempio seguente illustra come è stata eseguita questa configurazione per l'applicazione Python Flask di avvio rapido generata tramite il portale di Azure nella sezione precedente.

Assicurarsi di seguire le istruzioni per proteggere il segreto client, inizialmente inserito in testo normale nel file di configurazione dell'applicazione. Come procedura consigliata, rimuovere la variabile di testo normale dal file di configurazione e usare una variabile di ambiente o Azure KeyVault per proteggere il segreto dell'applicazione.

È invece possibile scegliere di usare un certificato anziché un segreto client. L'uso dei certificati è l'opzione consigliata se l'applicazione viene usata nell'ambiente di produzione. Le istruzioni per l'uso di un certificato sono disponibili nel passaggio finale della configurazione dell'applicazione di avvio rapido.

Attenzione

Non lasciare mai un segreto client di testo normale nel codice dell'applicazione di produzione.

  1. Dopo aver scaricato l'applicazione di avvio rapido, installare le relative dipendenze e verificare che venga eseguita nell'ambiente in uso, aprire il app_config.py file nell'editor preferito. Il file dovrebbe essere simile al frammento di codice seguente; per maggiore chiarezza, i commenti che fanno riferimento alla configurazione predefinita dell'API Microsoft Graph sono stati rimossi:

    import os
    
    CLIENT_ID = "YOUR_CLIENT_ID_HERE" 
    # Application (client) ID of app registration
    
    CLIENT_SECRET = "YOUR_CLIENT_SECRET_HERE" 
    # Placeholder - for use ONLY during testing.
    # In a production app, we recommend you use a more secure method of storing your secret,
    # like Azure Key Vault. Or, use an environment variable as described in Flask's documentation:
    # https://flask.palletsprojects.com/en/1.1.x/config/#configuring-from-environment-variables
    # CLIENT_SECRET = os.getenv("CLIENT_SECRET")
    # if not CLIENT_SECRET:
    #     raise ValueError("Need to define CLIENT_SECRET environment variable")
    
    AUTHORITY = "https://login.microsoftonline.com/YOUR_AAD_TENANT_ID_HERE"  # For multi-tenant app
    # AUTHORITY = "https://login.microsoftonline.com/Enter_the_Tenant_Name_Here"
    
    REDIRECT_PATH = "/getAToken"  
    # Used for forming an absolute URL to your redirect URI.
    # The absolute URL must match the redirect URI you set
    # in the app's registration in the Azure portal.
    
    ENDPOINT = 'https://graph.microsoft.com/v1.0/users'  
    
    SCOPE = ["User.ReadBasic.All"]
    
    SESSION_TYPE = "filesystem"  
    # Specifies the token cache should be stored in server-side session
    
  2. Aggiornare l'ID client o il segreto client all'applicazione con l'ID client e il segreto client della registrazione dell'app. Quando si esegue l'ambiente di produzione, assicurarsi di proteggere il segreto client usando una variabile di ambiente, Azure KeyVault o passando a un certificato.

    CLIENT_ID = "YOUR_CLIENT_ID_HERE" 
    # Application (client) ID of app registration
    
    CLIENT_SECRET = "YOUR_CLIENT_SECRET_HERE" 
    # Placeholder - for use ONLY during testing.
    # In a production app, we recommend you use a more secure method of storing your secret.
    
  3. Modificare la variabile con l'URL ENDPOINT della raccolta e l'endpoint API di Azure DevOps. Ad esempio, per una raccolta denominata "testCollection", il valore sarà:

    # Fill in the url to the user's ADO collection + the PAT lifecycle management API endpoint here
    
    ENDPOINT = 'https://vssps.dev.azure.com/{YOUR_COLLECTION_NAME_HERE}/_apis/Tokens/Pats?api-version=6.1-preview'
    

    Per una raccolta denominata "testCollection", questo endpoint sarà:

    ENDPOINT = 'https://vssps.dev.azure.com/testCollection/_apis/Tokens/Pats?api-version=6.1-preview'
    
  4. Modificare la SCOPE variabile in modo che faccia riferimento alla risorsa API di Azure DevOps. La stringa di caratteri è l'ID risorsa per l'API Azure DevOps e l'ambito .default fa riferimento a tutti gli ambiti per tale ID risorsa.

    SCOPE = ["499b84ac-1321-427f-aa17-267ca6975798/.default"]
    
  5. Se l'applicazione è configurata per un tenant specifico (anziché per la configurazione multi-tenant), usare il valore alternativo per la AUTHORITY variabile, aggiungendo il nome del tenant specifico in "Enter_the_Tenant_Name_Here".

    # For single-tenant app:
    AUTHORITY = "https://login.microsoftonline.com/YOUR_AAD_TENANT_ID_HERE"
    
    # For multi-tenant app:
    AUTHORITY = "https://login.microsoftonline.com/Enter_the_Tenant_Name_Here"
    
  6. Verificare che il file finale app_config.py corrisponda al seguente, con il CLIENT_ID, l'ID tenant e l'URL della raccolta. Per motivi di sicurezza, assicurarsi che il CLIENT_SECRET sia stato spostato in una variabile di ambiente, azure KeyVault o scambiato con un certificato per l'applicazione registrata:

    import os
    
    CLIENT_ID = "YOUR_CLIENT_ID_HERE" 
    # Application (client) ID of app registration
    
    # Note that the CLIENT_SECRET has been removed and moved to an environment variable or Azure KeyVault
    
    AUTHORITY = "https://login.microsoftonline.com/YOUR_AAD_TENANT_ID_HERE"  # For multi-tenant app
    # AUTHORITY = "https://login.microsoftonline.com/Enter_the_Tenant_Name_Here"
    
    REDIRECT_PATH = "/getAToken"  
    # Used for forming an absolute URL to your redirect URI.
    # The absolute URL must match the redirect URI you set in the app's registration in the Azure portal.
    
    ENDPOINT = 'https://vssps.dev.azure.com/testCollection/_apis/Tokens/Pats?api-version=6.1-preview' 
    # Used to configure user's collection URL and the desired API endpoint
    
    SCOPE = ["499b84ac-1321-427f-aa17-267ca6975798/.default"]
    # Means "All scopes for the Azure DevOps API resource"
    
    SESSION_TYPE = "filesystem"  
    # Specifies the token cache should be stored in server-side session
    
  7. Eseguire di nuovo l'applicazione per testare che è possibile ottenere tutti i token PAT per l'utente richiedente. Dopo la verifica, è possibile modificare il contenuto di 'app.py' e la 'ms-identity-python-webapp-master\templates' directory per supportare l'invio di richieste agli endpoint dell'API di gestione del ciclo di vita PAT rimanenti. Per un esempio di applicazione di avvio rapido Python Flask modificata per supportare le richieste a tutti gli endpoint api di gestione del ciclo di vita PAT, vedere questo repository di esempio in GitHub.

Aggiornare automaticamente un token di accesso di Microsoft Entra

Una volta configurata correttamente l'applicazione e l'utente ha acquisito un token di accesso, il token può essere usato per un massimo di un'ora. Il codice MSAL fornito in entrambi gli esempi precedenti aggiorna automaticamente il token dopo la scadenza. L'aggiornamento del token impedisce all'utente di eseguire di nuovo l'accesso e acquisire un nuovo codice di autorizzazione. Tuttavia, gli utenti potrebbero dover eseguire di nuovo l'accesso dopo 90 giorni dopo la scadenza del token di aggiornamento.

Domande frequenti

D: È possibile ottenere un esempio di questa applicazione di esempio per un altro tipo di linguaggio/framework/applicazione?

Se si ha una richiesta per un esempio, passare alla community di sviluppo per verificare se un altro utente ha un esempio da condividere. Se si ha un'applicazione di esempio che si vuole condividere con il pubblico di Azure DevOps più ampio, segnalarlo ed è possibile esaminarla in modo più ampio su questi documenti.

D: Qual è la differenza tra questa API token e l'API di amministrazione del token?

Questa API token e l'API di amministrazione del token , mentre simili, gestiscono casi d'uso e gruppi di destinatari diversi:

  • Questa API di token è in gran parte destinata agli utenti che vogliono gestire i token DI dominio di cui sono proprietari in una pipeline automatizzata. Questa API consente. Offre la possibilità di creare nuovi token e aggiornarli esistenti.
  • L'API di amministrazione del token è destinata agli amministratori dell'organizzazione. Gli amministratori possono usare questa API per recuperare e revocare le autorizzazioni OAuth, inclusi i token di accesso personale (PAT) e i token di sessione autodescrittura, degli utenti nelle organizzazioni.

D: Come è possibile rigenerare/ruotare i PT tramite l'API? Ho visto questa opzione nell'interfaccia utente, ma non vedo un metodo simile nell'API.

La funzionalità "Rigenera" disponibile nell'interfaccia utente esegue effettivamente alcune azioni, che sono completamente replicabili tramite l'API.

Per ruotare il pat, seguire questa procedura:

  1. Comprendere i metadati del pat usando una chiamata GET .
  2. Creare un nuovo pat con i metadati del pat precedente usando una chiamata POST .
  3. Revocare il pat precedente usando una chiamata DELETE

D: Viene visualizzato un popup "Need admin approval" (Richiesta approvazione amministratore) quando si tenta di procedere con l'uso di questa app. Come posso usare questa app senza l'approvazione dell'amministratore?

Sembra che il tenant disponga di criteri di sicurezza, che richiedono che all'applicazione vengano concesse le autorizzazioni per accedere alle risorse nell'organizzazione. In questo momento, l'unico modo per procedere con l'uso di questa app in questo tenant consiste nel chiedere a un amministratore di concedere l'autorizzazione all'app prima di poterla usare.

D: Perché viene visualizzato un errore simile a "Le entità servizio non sono autorizzate a eseguire questa azione" quando si tenta di chiamare l'API di gestione del ciclo di vita PAT usando un'entità servizio o un'identità gestita?

R: Le entità servizio e le identità gestite non sono consentite. Dato che questa API è in grado di creare e revocare LET, si vuole garantire che tali funzionalità potenti vengano concesse solo agli utenti autorizzati.