Scenario: API Web che chiama un'API Web (Scenario "Per conto di")
Informazioni su come creare un'API Web che chiama un'altra API Web per conto dell'utente.
Prima di leggere questo articolo, è consigliabile avere familiarità con i concetti di AD FS e il flusso on-Behalf_Of
Panoramica
Un client (app Web), non rappresentato nel diagramma seguente, chiama un'API Web protetta e fornisce un token di connessione JWT nell'intestazione HTTP "Authorization".
L'API Web protetta convalida il token e usa il metodo AcquireTokenOnBehalfOf di MSAL per richiedere (da AD FS) un altro token in modo da poter chiamare autonomamente una seconda API Web (denominata API Web downstream) per conto dell'utente.
L'API Web protetta usa questo token per chiamare un'API downstream. Può anche chiamare AcquireTokenSilentlater per richiedere token per altre API downstream, ma sempre per conto dello stesso utente. AcquireTokenSilent aggiorna il token quando necessario.
Per comprendere meglio come configurare lo scenario di autenticazione "Per conto di" in AD FS, si userà un esempio disponibile qui e la procedura dettagliata per la registrazione dell'app e i passaggi di configurazione del codice.
Prerequisiti
- Strumenti client di GitHub
- AD FS 2019 o versioni successive configurati e in esecuzione
- Visual Studio 2013 o versione successiva
Registrazione app in AD FS
Questa sezione mostra come registrare l'app nativa come client pubblico e le API Web come relying party in AD FS
In Gestione di AD FS fare clic con il pulsante destro del mouse su Gruppi di applicazioni e selezionare Aggiungi gruppo di applicazioni.
Nella configurazione guidata del gruppo di applicazioni immettere WebApiToWebApi in Nome e in Applicazioni client-server selezionare il modello Applicazione nativa che accede a un modello API Web. Fare clic su Avanti.
Copia il identificatore Client valore. Verrà usato in seguito come valore per ClientId nel file App.config dell'applicazione. Immettere le informazioni seguenti per URI di reindirizzamento: - https://ToDoListClient. Fare clic su Aggiungi. Fare clic su Avanti.
Nella schermata Configura API Web, immettere l'identificatore:https://localhost:44321/. Fare clic su Aggiungi. Fare clic su Avanti. Questo valore verrà usato in seguito nei file App.config e Web.config dell'applicazione.
Nella schermata Applica criteri di controllo degli accessi, selezionare Autorizza tutti e fare clic su Avanti.
Nella schermata Configura autorizzazioni applicazione selezionare openid e user_impersonation. Fare clic su Avanti.
Nella schermata Riepilogo fare clic su Avanti.
Nella schermata Completa fare clic su Chiudi.
In Gestione di AD FS fare clic su Gruppi di applicazioni e selezionare il gruppo di applicazioni WebApiToWebApi. Fare clic con il pulsante destro del mouse e selezionare Proprietà.
Nella schermata delle proprietà WebApiToWebApi fare clic su Aggiungi applicazione.
In Applicazioni autonome selezionare Applicazione Server.
Nella schermata Applicazione server aggiungere https://localhost:44321/ come Identificatore client e URI di reindirizzamento.
Nella schermata Configura credenziali applicazione selezionare Genera un segreto condiviso. Copiare il segreto per usarlo in un secondo momento.
Nella schermata Riepilogo fare clic su Avanti.
Nella schermata Completa fare clic su Chiudi.
In Gestione di AD FS fare clic su Gruppi di applicazioni e selezionare il gruppo di applicazioni WebApiToWebApi. Fare clic con il pulsante destro del mouse e selezionare Proprietà.
Nella schermata delle proprietà WebApiToWebApi fare clic su Aggiungi applicazione.
In Applicazioni autonome selezionare API Web.
In Configura API Web aggiungere https://localhost:44300 come Identificatore.
Nella schermata Applica criteri di controllo degli accessi, selezionare Autorizza tutti e fare clic su Avanti.
Nella schermata Configura autorizzazioni applicazione fare clic su Avanti.
Nella schermata Riepilogo fare clic su Avanti.
Nella schermata Completa fare clic su Chiudi.
Fare clic su OK nella schermata WebApiToWebApi - Proprietà API Web 2
Nella schermata Proprietà WebApiToWebApi selezionare WebApiToWebApi – API Web e fare clic su Modifica.
Nella schermata WebApiToWebApi – Proprietà API Web selezionare la scheda Regole di trasformazione rilascio e fare clic su Aggiungi regola.
Nell'Aggiunta guidata regole attestazione di trasformazione selezionare Invio di attestazioni mediante una regola personalizzata dall'elenco a discesa e fare clic su Avanti.
Immettere PassAllClaims nel campo Nome regola attestazione e la regola di attestazione x:[] = issue(claim=x); nel campo Regola personalizzata e fare clic su >Fine.
Fare clic su OK nella schermata WebApiToWebApi - Proprietà API Web
Nella schermata Proprietà WebApiToWebApi selezionare WebApiToWebApi – API Web 2 e fare clic su Modifica
.Nella schermata WebApiToWebApi – Proprietà API Web 2 selezionare la scheda Regole di trasformazione rilascio e fare clic su Aggiungi regola.
Nell'Aggiunta guidata regole attestazione di trasformazione selezionare Invio di attestazioni mediante una regola personalizzata dall'elenco a discesa e fare clic su Avanti
Immettere PassAllClaims nel campo Nome regola attestazione e la regola di attestazione x:[] => issue(claim=x); nel campo Regola personalizzata e fare clic su Fine.
Fare clic su OK nella schermata WebApiToWebApi – Proprietà API Web 2 e quindi nella schermata Proprietà WebApiToWebApi.
Configurazione del codice
Questa sezione illustra come configurare un'API Web per chiamare un'altra API Web
Scaricare l'esempio da qui
Aprire l'esempio usando Visual Studio
Aprire il file App.config. Modificare quanto segue:
ida:Authority: immettere https://[nome host di AD FS]/adfs/
ida:ClientId: immettere il valore dal passaggio 3 della sezione Registrazione app in AD FS precedente.
ida:RedirectUri: immettere il valore dal passaggio 3 della sezione Registrazione app in AD FS precedente.
todo:TodoListResourceId: immettere il valore dell'identificatore dal passaggio 4 della sezione Registrazione app in AD FS precedente.
ida: todo:TodoListBaseAddress: immettere il valore dell'identificatore dal passaggio 4 della sezione Registrazione app in AD FS precedente.
Aprire il file Web.config in ToDoListService. Modificare quanto segue:
ida:Audience: immettere il valore dell'identificatore client dal passaggio 12 della sezione Registrazione app in AD FS precedente.
ida:ClientId: immettere il valore dell'identificatore client dal passaggio 12 della sezione Registrazione app in AD FS precedente.
Ida: ClientSecret: immettere il valore del segreto condiviso copiato dal passaggio 13 della sezione Registrazione app in AD FS precedente.
ida:RedirectUri: immettere il valore RedirectUri dal passaggio 12 della sezione Registrazione app in AD FS precedente.
ida: AdfsMetadataEndpoint: immettere https://[nome host di AD FS]/federationmetadata/2007-06/federationmetadata.xml
ida:OBOWebAPIBase: immettere il valore dell'identificatore dal passaggio19 della sezione Registrazione app in AD FS precedente.
ida:Authority: immettere https://[nome host di AD FS]/adfs
Aprire il file Web.config in WebAPIOBO. Modificare quanto segue:
ida: AdfsMetadataEndpoint: immettere https://[nome host di AD FS]/federationmetadata/2007-06/federationmetadata.xml
ida:Audience: immettere il valore dell'identificatore client dal passaggio 12 della sezione Registrazione app in AD FS precedente.
Testare l'esempio
Questa sezione mostra come testare il campione configurato in precedenza.
Dopo aver apportato le modifiche al codice, ricompilare la soluzione
In Visual Studio fare clic con il pulsante destro del mouse sulla soluzione e selezionare Imposta progetti di avvio.
Nelle pagine delle proprietà assicurarsi che l’opzione Azione sia impostata su Avvia per ognuno dei progetti, ad eccezione di TodoListSPA.
Nella parte superiore di Visual Studio fare clic sulla freccia verde.
Nella schermata principale dell'app nativa fare clic su Accedi.
Se non viene visualizzata la schermata dell'app nativa, cercare e rimuovere i file *msalcache.bin dalla cartella in cui è salvato il repository del progetto sul sistema.
Si sarà reindirizzati alla pagina di accesso di ADFS. Andare avanti ed eseguire l'accesso.
Dopo aver eseguito l'accesso, immettere testo API Web nella chiamata API Web in Crea un'attività. Fare clic su Aggiungi elemento. Verrà chiamata l'API Web (Servizio elenco attività) che chiama quindi l'API Web 2 (WebAPIOBO) e aggiunge l'elemento nella cache.
Passaggi successivi
Flussi e scenari applicativi di OpenID Connect/OAuth in AD FS