Creare un'applicazione client nativa usando client pubblici OAuth con AD FS 2016 o versione successiva

Panoramica

Questo articolo illustra come compilare un'applicazione nativa che interagisce con un'API Web protetta da AD FS 2016 o versioni successive.

  1. L'applicazione WPF .NET TodoListClient usa Active Directory Authentication Library (ADAL) per ottenere un token di accesso JWT da Azure Active Directory (Azure AD) tramite il protocollo OAuth 2.0
  2. Il token di accesso viene usato come bearer token per autenticare l'utente quando si chiama l'endpoint /todolist dell'API Web TodoListService. L'esempio di applicazione verrà Azure AD qui e quindi modificato per AD FS 2016 o versione successiva.

Application overivew

Prerequisiti

Di seguito sono un elenco di prerequisiti che sono necessarie prima del completamento di questo documento. In questo documento si presuppone che ADFS è stato installato e che è stata creata una farm ADFS.

  • Strumenti client di GitHub
  • AD FS in Windows Server 2016 o versioni successive
  • Visual Studio 2013 o versioni successive

Creazione della procedura dettagliata di esempio

Creare il gruppo di applicazioni in AD FS

  1. In AD FS Gestione applicazioni fare clic con il pulsante destro del mouse su Gruppi di applicazioni e scegliere Aggiungi gruppo di applicazioni.

  2. Nella Creazione guidata gruppo di applicazioni immettere il nome desiderato, ad esempio NativeToDoListAppGroup. Selezionare l'applicazione nativa che accede a un modello di API Web. Fare clic su Avanti. Add application group

  3. Nella pagina Applicazione nativa prendere nota dell'identificatore generato da AD FS. Questo è l'ID con cui AD FS riconoscerà l'app client pubblica. Copia il identificatore Client valore. Verrà usato in un secondo momento come valore per ida:ClientId nel codice dell'applicazione. Se si vuole, è possibile fornire qualsiasi identificatore personalizzato qui. L'URI di reindirizzamento è qualsiasi valore arbitrario, ad esempio put https://ToDoListClienthttps://ToDoListClient

  4. Nella pagina Configura API Web impostare il valore dell'identificatore per l'API Web. Per questo esempio, deve essere il valore dell'URL SSL in cui dovrebbe essere in esecuzione l'app Web. È possibile ottenere questo valore facendo clic sulle proprietà del progetto TooListServer nella soluzione. Verrà usato in un secondo momento come valore todo:TodoListResourceId nel file App.config dell'applicazione client nativa e anche come todo:TodoListBaseAddress. Web API

  5. Passare attraverso Applica criteri di controllo di accesso e Configurare le autorizzazioni dell'applicazione con i valori predefiniti. La pagina di riepilogo dovrebbe essere simile alla seguente. Summary

Fare clic su Avanti e quindi completare la procedura guidata.

Aggiungere l'attestazione NameIdentifier all'elenco di attestazioni rilasciate

L'applicazione demo usa il valore nell'attestazione NameIdentifier in varie posizioni. A Azure AD, AD FS non emettere un'attestazione NameIdentifier per impostazione predefinita. Pertanto, è necessario aggiungere una regola attestazione per rilasciare l'attestazione NameIdentifier in modo che l'applicazione possa usare il valore corretto. In questo esempio, il nome specificato dell'utente viene emesso come valore NameIdentifier per l'utente nel token. Per configurare la regola attestazione, aprire il gruppo di applicazioni appena creato e fare doppio clic sull'API Web. Selezionare la scheda Regole di trasformazione rilascio e quindi fare clic sul pulsante Aggiungi regola. Nel tipo di regola attestazione scegliere Regola attestazione personalizzata e quindi aggiungere la regola attestazione, come illustrato di seguito.

c:[Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]
 => issue(store = "Active Directory", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier"), query = ";givenName;{0}", param = c.Value);

NameIdentifier claim rule

Modificare il codice dell'applicazione

In questa sezione viene illustrato come scaricare l'esempio di API Web e modificarla in Visual Studio. Verrà usato l'esempio di Azure AD che è qui.

Per scaricare il progetto di esempio, utilizzare Git Bash e digitare quanto segue:

git clone https://github.com/Azure-Samples/active-directory-dotnet-native-desktop

Modificare ToDoListClient

Questo progetto nella soluzione rappresenta l'applicazione client nativa. È necessario assicurarsi che l'applicazione client sia in grado di:

  1. Dove andare per ottenere l'autenticazione dell'utente quando necessario?
  2. Qual è l'ID che il client deve fornire all'autorità di autenticazione (AD FS)?
  3. Qual è l'ID della risorsa per cui viene chiesto il token di accesso?
  4. Qual è l'indirizzo di base dell'API Web?

Le modifiche al codice seguenti sono necessarie per ottenere le informazioni precedenti all'applicazione client nativa.

App.config

  • Aggiungere la chiave ida:Authority con il valore che rappresenta il AD FS servizio. Ad esempio: https://fs.contoso.com/adfs/

  • Modificare la chiave ida:ClientId con il valore di Identificatore client nella pagina Applicazione nativa durante la creazione del gruppo di applicazioni in AD FS. Ad esempio, 3f07368b-6efd-4f50-a330-d93853f4c855

  • Modificare todo:todo:TodoListResourceId con il valore di Identificatore nella pagina Configura API Web durante la creazione del gruppo di applicazioni in AD FS. Ad esempio: https://localhost:44321/

  • Modificare todo:TodoListBaseAddress con il valore di Identificatore nella pagina Configura API Web durante la creazione del gruppo di applicazioni in AD FS. Ad esempio: https://localhost:44321/

  • Impostare il valore di ida:RedirectUri con il valore di URI di reindirizzamento nella pagina applicazione nativa durante la creazione del gruppo di applicazioni in AD FS. Ad esempio: https://ToDoListClient

  • Per facilitare la lettura, è possibile rimuovere o impostare come commento la chiave per ida:Tenant e ida:AADInstance.

    App config

MainWindow.xaml.cs

  • Impostare come commento la riga per aadInstance come indicato di seguito

    // private static string aadInstance = ConfigurationManager.AppSettings["ida:AADInstance"];

  • Aggiungere il valore per authority come indicato di seguito

    private static string authority = ConfigurationManager.AppSettings["ida:Authority"];

  • Eliminare la riga per la creazione del valore dell'autorità da aadInstance e dal tenant

    private static string authority = String.Format(CultureInfo.InvariantCulture, aadInstance, tenant);

  • Nella funzione MainWindowmodificare la creazione dell'istanza di authContext in

    authContext = new AuthenticationContext(authority,false);

    ADAL non supporta la convalida AD FS come autorità e pertanto è necessario passare un flag di valore false per il parametro validateAuthority.

    Main window

Modificare TodoListService

Due file necessitano di modifiche in questo – Web.config e Startup.Auth.cs. Web.Config necessarie per ottenere i valori corretti dei parametri. Le modifiche di Startup.Auth.cs sono necessarie per impostare WebAPI per l'autenticazione AD FS anziché Azure AD.

Web.config

  • Impostare come commento la chiave ida:Tenant perché non è necessaria
  • Aggiungere la chiave per ida:Authority con il valore che indica il nome di dominio completo del servizio federativo, ad esempio
  • Modificare la chiave ida:Audience con il valore dell'identificatore api Web specificato nella pagina Configura API Web durante l'aggiunta del gruppo di applicazioni AD FS.
  • Aggiungere la chiave ida:AdfsMetadataEndpoint con il valore corrispondente all'URL dei metadati AD FS servizio, ad esempio:

Web config

Startup.Auth.cs

Modificare la funzione ConfigureAuth come indicato di seguito

    public void ConfigureAuth(IAppBuilder app)
    {
        app.UseActiveDirectoryFederationServicesBearerAuthentication(
            new ActiveDirectoryFederationServicesBearerAuthenticationOptions
            {
                MetadataEndpoint = ConfigurationManager.AppSettings["ida:AdfsMetadataEndpoint"],
                TokenValidationParameters = new TokenValidationParameters()
                {
                    SaveSigninToken = true,
                    ValidAudience = ConfigurationManager.AppSettings["ida:Audience"]
                }

            });
    }

In sostanza, l'autenticazione viene configurata per l'uso di AD FS e vengono fornite ulteriori informazioni sui metadati AD FS e, per convalidare il token, l'attestazione del gruppo di destinatari deve essere il valore previsto dall'API Web. Esecuzione dell'applicazione

  1. Nella soluzione NativeClient-DotNet fare clic con il pulsante destro del mouse e scegliere Proprietà. Modificare l'Project di avvio come illustrato di seguito in Più progetti di avvio e impostare TodoListClient e TodoListService su Start. Solution properties

  2. Premere F5 o selezionare Debug > continua nella barra dei menu. Verrà avviata sia l'applicazione nativa che WebAPI. Fare clic sul pulsante Accedi nell'applicazione nativa e verrà visualizzato un accesso interattivo da AD AL e verrà reindirizzato al AD FS servizio. Immettere le credenziali di un utente valido. Screenshot showing the sign in dialog box.

In questo passaggio l'applicazione nativa è stata reindirizzata a AD FS e ha ottenuto un token ID e un token di accesso per l'API Web

  1. Immettere un elemento to do nella casella di testo e fare clic su Aggiungi elemento. In questo passaggio l'applicazione raggiunge l'API Web per aggiungere l'elemento to do e, a tale scopo, presenta il token di accesso all'API Web ottenuta da AD FS. L'API Web corrisponde al valore del gruppo di destinatari per assicurarsi che il token sia destinato a esso e verifica la firma del token usando le informazioni dai metadati della federazione.

Sign-in

Passaggi successivi

Sviluppare AD FS