Aggiungere l'autenticazione a un bot

SI APPLICA A: SDK v4

Azure AI servizio Bot v4 SDK facilita lo sviluppo di bot che possono accedere alle risorse online che richiedono l'autenticazione utente. Il bot non deve gestire i token di autenticazione perché Azure usa OAuth 2.0 per generare un token in base alle credenziali di ogni utente. Il bot usa il token generato da Azure per accedere a tali risorse. In questo modo, l'utente non deve fornire ID e password al bot per accedere a una risorsa protetta, ma solo a un provider di identità attendibile.

Per una panoramica di come Bot Framework gestisce questo tipo di autenticazione, vedere Autenticazione utente.

Questo articolo fa riferimento a due esempi. Uno illustra come ottenere un token di autenticazione. L'altro è più complesso e mostra come accedere a Microsoft Graph per conto dell'utente. In entrambi i casi, è possibile usare Azure AD v1 o v2 come provider di identità per ottenere un token OAuth per il bot. Questo articolo illustra come:

  • Creare una risorsa di Azure Bot
  • Creare il provider di identità Microsoft Entra ID
  • Registrare il provider di identità Microsoft Entra ID con il bot
  • Preparare il codice del bot

Al termine di questo articolo, si avrà un bot in grado di rispondere ad alcune semplici attività. Nell'esempio di Microsoft Graph è possibile inviare un messaggio di posta elettronica, visualizzare gli utenti e controllare i messaggi di posta elettronica recenti. Non è necessario pubblicare il bot per testare le funzionalità OAuth; Tuttavia, il bot richiederà l'ID e la password validi per l'app di Azure.

Nota

Gli SDK JavaScript, C# e Python di Bot Framework continueranno a essere supportati, ma Java SDK verrà ritirato con il supporto finale a lungo termine che termina a novembre 2023.

I bot esistenti creati con Java SDK continueranno a funzionare.

Per la creazione di nuovi bot, prendere in considerazione l'uso di Power Virtual Agents e leggere la scelta della soluzione chatbot appropriata.

Per altre informazioni, vedere Il futuro della compilazione di bot.

Considerazioni su Web Chat e Direct Line

Importante

È necessario usare Direct Line con l'autenticazione avanzata abilitata per ridurre i rischi di sicurezza quando ci si connette a un bot usando il controllo chat Web. Per altre informazioni, vedere Autenticazione avanzata direct Line.

Prerequisiti

  • Conoscenza di nozioni di base sui bot, gestione dello stato, libreria di dialoghi, implementazione di un flusso di conversazione sequenziale e riutilizzo dei dialoghi.

  • Conoscenza dello sviluppo di Azure e OAuth 2.0.

  • Visual Studio 2017 o versione successiva per .NET.

  • Node.js per JavaScript.

  • Python 3.8+ per Python.

  • Uno degli esempi elencati di seguito.

    Esempio Versione di BotBuilder Dimostra
    Autenticazione in C# o JavaScript o Java o Python v4 Supporto OAuthCard
    Autenticazione per Microsoft Graph in C# o JavaScript o Java o Python v4 Supporto dell'API Microsoft Graph con OAuth 2.0
    Autenticazione per Microsoft Teams in C# o JavaScript o Java o Python v4 Supporto dell'API Microsoft Graph con OAuth 2.0

    Per eseguire gli esempi a cui si fa riferimento in questo articolo, è necessario:

    • Applicazione Microsoft Entra ID con cui registrare una risorsa bot in Azure. Questa applicazione consente al bot di accedere a una risorsa protetta esterna, ad esempio Microsoft Graph. Consente inoltre all'utente di comunicare con il bot tramite diversi canali, ad esempio la chat.
    • Applicazione Microsoft Entra ID separata da usare come provider di identità. Questa applicazione fornisce le credenziali necessarie per stabilire una connessione OAuth tra il bot e la risorsa protetta. In questo articolo si usa Active Directory come provider di identità. Sono supportati anche numerosi altri provider.

Importante

Ogni volta che si registra un bot in Azure, viene assegnata un'applicazione Microsoft Entra ID. Questa applicazione protegge tuttavia l'accesso da canale a bot. È necessaria un'altra applicazione MICROSOFT Entra ID per ogni risorsa protetta esterna a cui si vuole accedere il bot per conto dell'utente.

Creare la risorsa

Creare la risorsa Azure Bot, che consentirà di registrare il bot con l'servizio Bot di intelligenza artificiale di Azure.

Suggerimento

Non è possibile creare nuove risorse di registrazione per bot e canali bot. Tuttavia, le risorse esistenti configurate e distribuite continueranno a funzionare. I bot creati da un modello VSIX o Yeoman dall'SDK versione 4.14.1.2 o successiva contengono modelli arm che genereranno una risorsa di Azure Bot.

  1. Vai al portale di Azure.

  2. Nel riquadro destro selezionare Crea una risorsa.

  3. Nella casella di ricerca immettere bot, quindi premere INVIO.

  4. Selezionare la scheda Azure Bot .

    Selezionare la risorsa azure bot

  5. Seleziona Crea.

  6. Immettere i valori nei campi obbligatori ed esaminare e aggiornare le impostazioni.

    1. Fornire informazioni in Dettagli progetto. Selezionare se il bot avrà la residenza dei dati globale o locale. Attualmente, la funzionalità di residenza dei dati locali è disponibile per le risorse nell'area "westeurope" e "centralindia". Per altre informazioni, vedere Regionalizzazione in Azure AI servizio Bot.

      Impostazioni dei dettagli del progetto per una risorsa di Azure Bot

    2. Specificare le informazioni in ID app Microsoft. Selezionare la modalità di gestione dell'identità del bot in Azure e se creare una nuova identità o usarne una esistente.

      Impostazioni dell'ID app Microsoft per una risorsa di Azure Bot

  7. Selezionare Rivedi e crea.

  8. Se la convalida viene superata, selezionare Crea.

  9. Al termine della distribuzione, selezionare Vai alla risorsa. Il bot e le risorse correlate verranno visualizzati nel gruppo di risorse selezionato.

  10. Se Bot Framework SDK non è già disponibile, selezionare Scarica da GitHub per informazioni su come usare i pacchetti per il linguaggio preferito.

    Creare bot in SDK

È ora possibile creare il bot con Bot Framework SDK.

Suggerimento

Quando Azure crea una nuova risorsa Azure Bot a tenant singolo o multi-tenant con un nuovo ID app, genera anche una password.

Informazioni sull'identità del bot

Seguire questa procedura per aggiungere informazioni sull'identità al file di configurazione del bot. Il file varia a seconda del linguaggio di programmazione usato per creare il bot.

Importante

La versione Java di Bot Framework SDK supporta solo bot multi-tenant. La versione Python di Bot Framework SDK supporta bot multi-tenant e a tenant singolo. Le versioni C# e JavaScript supportano tutti e tre i tipi di applicazione per la gestione dell'identità del bot.

Lingua File name Note
C# appsettings.json Supporta tutti e tre i tipi di applicazione per la gestione dell'identità del bot.
JavaScript .env Supporta tutti e tre i tipi di applicazione per la gestione dell'identità del bot.
Java application.properties Supporta solo bot multi-tenant.
Python config.py Supporta bot multi-tenant e a tenant singolo. Specificare le proprietà come argomenti per le chiamate al os.environ.get metodo.

Le informazioni sull'identità da aggiungere dipendono dal tipo di applicazione del bot. Specificare i valori seguenti nel file di configurazione.

Disponibile solo per i bot C# e JavaScript.

Proprietà valore
MicrosoftAppType UserAssignedMSI
MicrosoftAppId ID client dell'identità gestita assegnata dall'utente.
MicrosoftAppPassword Non applicabile. Lasciare vuoto questo campo per un bot di identità gestita assegnato dall'utente.
MicrosoftAppTenantId ID tenant dell'identità gestita assegnata dall'utente.

Per aggiornare il servizio app

Se si dispone di una risorsa di servizio app esistente (app Web) per il bot e il bot è un'applicazione di identità gestita assegnata dall'utente, potrebbe essere necessario aggiornare il servizio app del bot:

  1. Passare al pannello servizio app per l'app Web del bot.
  2. In Impostazioni selezionare Identità.
  3. Nel pannello Identità selezionare la scheda Assegnata dall'utente e Aggiungi (+).
  4. Nel pannello Aggiungi identità gestita assegnata dall'utente:
    1. Selezionare la propria sottoscrizione.

    2. Per Identità gestite assegnate dall'utente selezionare l'identità gestita per il bot. Se l'identità gestita è stata generata automaticamente, avrà lo stesso nome del bot.

    3. Selezionare Aggiungi per usare questa identità per il bot.

      Pannello servizio app Identità con l'identità gestita per il bot selezionato.

Per ottenere l'ID dell'app o del tenant

Per ottenere l'ID tenant o l'app del bot:

  1. Passare al pannello delle risorse di Azure Bot per il bot.
  2. Passare al pannello Configurazione del bot. Da questo pannello è possibile copiare l'ID app Microsoft del bot o l'ID tenant dell'app.

Per generare una nuova password

I bot a tenant singolo e multi-tenant hanno un segreto dell'app o una password necessari per alcune operazioni. Azure AI servizio Bot nasconde il segreto del bot. Tuttavia, il proprietario della risorsa servizio app del bot può generare una nuova password:

  1. Passare al pannello delle risorse di Azure Bot per il bot.
  2. Passare al pannello Configurazione del bot.
  3. Selezionare Gestisci, accanto a ID app Microsoft, per passare al pannello Certificati e segreti per il servizio app.
  4. Seguire le istruzioni nel pannello per creare un nuovo segreto client e registrare il valore in un luogo sicuro.

Servizio identità ID Microsoft Entra

Microsoft Entra ID è un servizio di gestione delle identità cloud che consente di creare applicazioni che consentono di accedere in modo sicuro agli utenti usando protocolli standard di settore come OAuth 2.0.

È possibile usare uno di questi due servizi di gestione delle identità:

  1. Piattaforma per sviluppatori Microsoft Entra ID (v1.0). Nota anche come endpointAzure AD v1, consente di creare app per garantire agli utenti un accesso sicuro con un account aziendale o dell'istituto di istruzione Microsoft. Per altre informazioni, vedere la panoramica di Microsoft Entra ID for developers (v1.0).
  2. Microsoft Identity Platform (v2.0). Noto anche come endpoint ID Di Microsoft Entra, che è un'evoluzione della piattaforma Azure AD (v1.0). Consente di creare applicazioni che supportano l'accesso a tutti provider di identità Microsoft e il recupero di token per chiamare API Microsoft, come Microsoft Graph o altre API create dagli sviluppatori. Per altre informazioni, vedere Panoramica di Microsoft Identity Platform (v2.0).

Per informazioni sulle differenze tra gli endpoint versione 1 e 2, vedere Perché eseguire l'aggiornamento a Microsoft Identity Platform (v2.0)?. Per informazioni complete, vedere Microsoft Identity Platform (in precedenza MICROSOFT Entra ID for developers).

Creare il provider di identità Microsoft Entra ID

Questa sezione illustra come creare un provider di identità Microsoft Entra ID che usa OAuth 2.0 per autenticare il bot. È possibile usare gli endpoint di Azure AD v1 o Microsoft Entra ID.

Suggerimento

Sarà necessario creare e registrare l'applicazione Microsoft Entra ID in un tenant in cui è possibile fornire il consenso per delegare le autorizzazioni richieste da un'applicazione.

  1. Aprire il pannello Microsoft Entra ID nel portale di Azure. Se non si è nel tenant corretto, selezionare Cambia directory per passare al tenant corretto. Per informazioni su come creare un tenant, vedere Accedere al portale e creare un tenant.

  2. Aprire il pannello Registrazioni per l'app.

  3. Nel pannello Registrazioni app selezionare Nuova registrazione.

  4. Compilare i campi obbligatori e creare la registrazione per l'app.

    1. Assegnare un nome all'applicazione.

    2. Selezionare le opzioni per Tipi di account supportati per l'applicazione. Tutte queste opzioni sono appropriate per questo esempio.

    3. Per URI di reindirizzamento selezionare Web e impostare l'URL su uno degli URL di reindirizzamento OAuth supportati.

    4. Selezionare Registra.

      • Dopo la creazione, Azure visualizza la pagina Panoramica per l'app.
      • Registrare il valore di ID applicazione (client). Questo valore verrà usato in un secondo momento come ID client quando si crea il stringa di connessione e si registra il provider MICROSOFT Entra ID con la registrazione del bot.
      • Registrare il valore ID directory (tenant). Questo valore verrà usato per registrare l'applicazione del provider con il bot.
  5. Nel riquadro di spostamento selezionare Certificati e segreti per creare un segreto per l'applicazione.

    1. In Segreti client, selezionare Nuovo segreto client.
    2. Aggiungere una descrizione per identificare questo segreto rispetto ad altri che potrebbero essere necessari per creare per l'app, ad esempio bot login.
    3. Per Scadenza scegliere un periodo di tempo dopo il quale il segreto scadrà.
    4. Selezionare Aggiungi.
    5. Prima di uscire da Certificati e segreti, registrare il segreto. Questo valore verrà usato in un secondo momento come segreto client quando si registra l'applicazione MICROSOFT Entra ID con il bot.
  6. Nel riquadro di spostamento selezionare Autorizzazioni API per aprire il pannello Autorizzazioni API. È consigliabile impostare in modo esplicito le autorizzazioni API per l'app.

    1. Selezionare Aggiungi un'autorizzazione per visualizzare il riquadro Richiedi autorizzazioni API.

    2. Per questo esempio selezionare API Microsoft e Microsoft Graph.

    3. Scegliere Autorizzazioni delegate e assicurarsi che le autorizzazioni necessarie siano selezionate. Questo esempio richiede queste autorizzazioni.

      Nota

      Qualsiasi autorizzazione contrassegnata come CONSENSO AMMINISTRATORE OBBLIGATORIO richiederà l'accesso sia dell'utente che dell'amministratore del tenant, quindi cercare di evitare tali autorizzazioni per il bot.

      • openid
      • profile
      • Mail.Read
      • Mail.Send
      • User.Read
      • User.ReadBasic.All
    4. Selezionare Aggiungi autorizzazioni. La prima volta che un utente accede a questa app tramite il bot, dovrà concedere il consenso.

È ora configurata un'applicazione Microsoft Entra ID.

Nota

Si assegneranno l'ID applicazione (client) e il segreto client, quando si crea il stringa di connessione e si registrerà il provider di identità con la registrazione del bot. Consultare la sezione successiva.

Registrare il provider di identità Microsoft Entra ID con il bot

Il passaggio successivo consiste nel registrare il provider di identità con il bot.

  1. Aprire la pagina della risorsa Azure Bot del bot nella portale di Azure.

  2. Seleziona Impostazioni.

  3. In OAuth Connessione ion Impostazioni nella parte inferiore della pagina selezionare Aggiungi impostazione.

  4. Compilare il modulo come segue:

    1. Nome. immettere un nome per la connessione. Sarà usato nel codice del bot.

    2. Provider di servizi. Selezionare Microsoft Entra ID per visualizzare i campi specifici di Microsoft Entra ID.

    3. ID client. Immettere l'ID applicazione (client) registrato per il provider di identità Microsoft Entra ID.

    4. Segreto client. Immettere il segreto registrato per il provider di identità Microsoft Entra ID.

      Suggerimento

      Per usare i certificati, è possibile selezionare AAD v2 con il provider Certificati . Dovrai assegnare servizio Bot Token Store (appid: 5b404cf4-a79d-4cfe-b866-24bf8e1a4921) l'autorizzazione per ottenere il certificato.

    5. URL di Scambio di token. Lasciare vuoto perché viene usato solo per l'accesso SSO in Microsoft Entra ID.

    6. ID tenant. Immettere l'ID directory (tenant) registrato in precedenza per l'app Microsoft Entra ID o comune a seconda dei tipi di account supportati selezionati al momento della creazione dell'app Azure DD. Per decidere quale valore assegnare, seguire questi criteri:

      • Quando si crea l'app Microsoft Entra ID, se si seleziona Account solo in questa directory organizzativa (solo Microsoft - Tenant singolo) immettere l'ID tenant registrato in precedenza per l'app Microsoft Entra ID.
      • Tuttavia, se hai selezionato Account in qualsiasi directory dell'organizzazione (qualsiasi directory Microsoft Entra ID - Multi-tenant e account Microsoft personali, ad esempio Xbox, Outlook.com) o Account in qualsiasi directory organizzativa (Microsoft Entra ID directory - Multi tenant), immetti common invece di un ID tenant. In caso contrario, l'app Microsoft Entra ID verificherà tramite il tenant il cui ID è stato selezionato ed esclude gli account Microsoft personali.

      Questo sarà il tenant associato agli utenti che possono essere autenticati. Per altre informazioni, vedere Tenancy in Microsoft Entra ID.

    7. In Ambiti immettere i nomi dell'autorizzazione scelta dalla registrazione dell'applicazione. A scopo di test, è sufficiente immettere: openid profile.

      Nota

      Per Microsoft Entra ID, il campo Ambiti accetta un elenco di valori con distinzione tra maiuscole e minuscole e separate da spazi.

  5. Seleziona Salva.

Nota

Questi valori consentono all'applicazione di accedere ai dati di Office 365 tramite l'API Microsoft Graph. Inoltre, l'URL di Scambio di token deve essere lasciato vuoto perché viene usato solo per l'accesso SSO in Microsoft Entra ID.

Test della connessione

  1. Selezionare la voce di connessione per aprire la connessione creata.
  2. Selezionare Test Connessione ion nella parte superiore del riquadro Impostazioni Connessione provider di servizi.
  3. La prima volta si dovrebbe aprire una nuova scheda del browser che elenca le autorizzazioni che l'app richiede e chiede di accettarle.
  4. Selezionare Accetto.
  5. Verrà quindi eseguito il reindirizzamento a un Connessione test alla <pagina Nome connessione> completata.

Ora è possibile usare questo nome di connessione nel codice bot per recuperare i token dell'utente.

Preparare il codice del bot

Per completare questo processo, sono necessari l'ID e la password dell'app del bot.

  1. Clonare dal repository GitHub l'esempio che si vuole usare: Autenticazione bot o Autenticazione bot per Microsoft Graph.

  2. Aggiornare appsettings.json:

    • Impostare ConnectionName sul nome dell'impostazione di connessione OAuth aggiunta al bot.

    • Impostare MicrosoftAppId e MicrosoftAppPassword sull'ID app e il segreto del bot.

      A seconda dei caratteri del segreto del bot, potrebbe essere necessario eseguire l'escape XML della password. Ad esempio, tutte le occorrenze del carattere & (e commerciale) dovranno essere codificate come &amp;.

    {
      "MicrosoftAppType": "",
      "MicrosoftAppId": "",
      "MicrosoftAppPassword": "",
      "MicrosoftAppTenantId": "",
      "ConnectionName": ""
    }
    

    Per usare OAuth nel bot con residenza dei dati nel cloud pubblico, è necessario aggiungere le configurazioni seguenti in appsettings

    "OAuthUrl": "<Regional-OAuth-Uri>",
    "ToChannelFromBotOAuthScope": "https://api.botframework.com",
    "ToChannelFromBotLoginUrlTemplate": "https://api.botframework.com",
    "PublicAzureChannel": "https://api.botframework.com",
    "ToBotFromChannelOpenIdMetadataUrl": "https://login.botframework.com/v1/.well-known/openidconfiguration",
    "ToBotFromEmulatorOpenIdMetadataUrl": "https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration",
    "ToBotFromChannelTokenIssuer": "https://api.botframework.com",
    "ToChannelFromBotLoginUrl": "https://login.microsoftonline.com/botframework.com",
    

    Dove <Regional-OAuth-Url> è uno degli URI seguenti:

    URI Descrizione
    https://europe.api.botframework.com Per i bot pubblici cloud con residenza dei dati in Europa.
    https://unitedstates.api.botframework.com Per i bot cloud pubblici con residenza dei dati nella Stati Uniti.
    https://india.api.botframework.com Per i bot cloud pubblici con residenza dei dati in India.
  3. Aggiornare Startup.cs:

    Per usare OAuth in cloud di Azure non pubblici, ad esempio il cloud per enti pubblici, è necessario aggiungere il codice seguente nel file Startup.cs .

    string uri = "<uri-to-use>";
    MicrosoftAppCredentials.TrustServiceUrl(uri);
    OAuthClientConfig.OAuthEndpoint = uri;
    
    

    Dove <uri-to-use> è uno degli URI seguenti:

    URI Descrizione
    https://api.botframework.azure.us Per Stati Uniti bot cloud per enti pubblici senza residenza dei dati.
    https://api.botframework.com Per i bot cloud pubblici senza residenza dei dati. Si tratta dell'URI predefinito e non richiede una modifica per Startup.cs.

Per ottenere i valori di ID app Microsoft e password dell'app Microsoft, vedere Ottenere la password di registrazione.

Nota

È ora possibile pubblicare questo codice bot nella sottoscrizione di Azure (selezionare con il pulsante destro del codice nel progetto e scegliere Pubblica), ma non è necessario per questo articolo. Per pubblicare il codice bot, è necessario impostare una configurazione di pubblicazione che usa l'applicazione e il piano di hosting specificati nella configurazione del bot nel portale di Azure.

Testare il bot usando l'emulatore

Se non è già stato fatto, installare Bot Framework Emulator. Vedere anche Eseguire il debug con l'emulatore.

Affinché l'account di accesso di esempio del bot funzioni, è necessario configurare l'emulatore come illustrato in Configurare l'emulatore per l'autenticazione.

Test in corso

Dopo aver configurato il meccanismo di autenticazione, è possibile eseguire il test effettivo dell'esempio di bot.

Nota

Potrebbe essere richiesta l'immissione di un codice Magic a causa della modalità di implementazione dell'esempio di bot. Questo codice Magic è incluso nella RFC 7636 e costituisce un elemento di sicurezza aggiuntivo. Rimuovendo il codice magic, si verifica un aumento del rischio di sicurezza. Questa operazione può essere mitigata usando Direct Line con l'autenticazione avanzata abilitata. Per altre informazioni, vedere Autenticazione avanzata di Bot Framework.

  1. Eseguire il bot di esempio in locale nel computer.
  2. Avviare l'emulatore.
  3. Quando ci si connette al bot, è necessario specificare l'ID e la password dell'app del bot.
    • L'ID app e la password sono quelli della registrazione dell'app di Azure. Si tratta degli stessi valori assegnati all'app del bot nel file appsettings.json o .env. Nell'emulatore questi valori vengono assegnati nel file di configurazione o alla prima connessione al bot.
    • Se è necessario far precedere dai caratteri di escape XML la password nel codice del bot, è necessario effettuare l'operazione a questo punto.
  4. Digitare help per vedere un elenco dei comandi disponibili per il bot e testare le funzioni di autenticazione.
  5. Dopo aver effettuato l'accesso, non è necessario fornire di nuovo le credenziali fino a quando non ci si disconnette.
  6. Per disconnettersi e annullare l'autenticazione, digitare logout.

Nota

L'autenticazione bot richiede l'uso del servizio Bot Connessione or. Il servizio accede alle informazioni dalla risorsa di Azure Bot.

Esempio di autenticazione

Nell'esempio Bot authentication il dialogo è progettato per recuperare il token dell'utente dopo che ha eseguito l'accesso.

Conversazione di esempio con il bot di esempio di autenticazione.

Esempio di autenticazione per Microsoft Graph

Nell'esempio Di autenticazione bot per Microsoft Graph la finestra di dialogo è progettata per accettare un set limitato di comandi dopo l'accesso dell'utente.

Conversazione di esempio con il bot di esempio di autenticazione di Microsoft Graph.


Informazioni aggiuntive

Quando un utente chiede al bot di eseguire un'operazione che richiede che l'utente abbia eseguito l'accesso, il bot può usare il OAuthPrompt per avviare il recupero di un token per una connessione specifica. OAuthPrompt crea un flusso di recupero del token costituito da:

  1. Verifica se l'servizio Bot di intelligenza artificiale di Azure ha già un token per l'utente e la connessione correnti. Se è presente un token, viene restituito il token.
  2. Se Azure AI servizio Bot non dispone di un token memorizzato nella cache, viene creato un OAuthCard pulsante di accesso su cui l'utente può selezionare.
  3. Dopo aver selezionato l'utente sul OAuthCard pulsante di accesso, Azure AI servizio Bot invierà il bot direttamente al token dell'utente o presenterà all'utente un codice di autenticazione a 6 cifre da immettere nella finestra della chat.
  4. Se all'utente viene presentato un codice di autenticazione, il bot lo scambia per il token dell'utente.

Le sezioni seguenti descrivono come vengono implementate alcune attività comuni di autenticazione nell'esempio.

Usare un prompt OAuth per consentire all'utente di accedere e ottenere un token

Diagramma dell'architettura per l'esempio C#.

Dialogs\MainDialog.cs

Aggiungere un prompt OAuth nel costruttore di MainDialog. Il valore per il nome della connessione è stato recuperato dal file appsettings.json.

AddDialog(new OAuthPrompt(
    nameof(OAuthPrompt),
    new OAuthPromptSettings
    {
        ConnectionName = ConnectionName,
        Text = "Please Sign In",
        Title = "Sign In",
        Timeout = 300000, // User has 5 minutes to login (1000 * 60 * 5)
    }));

All'interno del passaggio del dialogo usare BeginDialogAsync per avviare il prompt OAuth, che chiede all'utente di accedere.

  • Se l'utente è già connesso, verrà generato un evento di risposta del token, senza una richiesta.
  • In caso contrario, all'utente verrà richiesto di accedere. L'servizio Bot di intelligenza artificiale di Azure invia l'evento di risposta del token dopo il tentativo di accesso dell'utente.
return await stepContext.BeginDialogAsync(nameof(OAuthPrompt), null, cancellationToken);

All'interno del passaggio del dialogo seguente verificare la presenza di un token nel risultato del passaggio precedente. Se non è Null, l'utente ha eseguito l'accesso.

// Get the token from the previous step. Note that we could also have gotten the
// token directly from the prompt itself. There is an example of this in the next method.
var tokenResponse = (TokenResponse)stepContext.Result;

Attendere un TokenResponseEvent

Quando viene avviato, il prompt OAuth attende un evento di risposta del token da cui recupererà il token dell'utente.

Bots\AuthBot.cs

AuthBot deriva da ActivityHandler e gestisce in modo esplicito le attività degli eventi di risposta del token. In questo caso, viene continuato il dialogo attivo, che consente al prompt OAuth di elaborare l'evento e recuperare il token.

protected override async Task OnTokenResponseEventAsync(ITurnContext<IEventActivity> turnContext, CancellationToken cancellationToken)
{
    Logger.LogInformation("Running dialog with Token Response Event Activity.");

    // Run the Dialog with the new Token Response Event Activity.
    await Dialog.RunAsync(turnContext, ConversationState.CreateProperty<DialogState>(nameof(DialogState)), cancellationToken);
}

Disconnettere l'utente

È consigliabile consentire agli utenti di disconnettersi in modo esplicito, anziché basarsi sulla connessione per il timeout.

Dialogs\LogoutDialog.cs

private async Task<DialogTurnResult> InterruptAsync(DialogContext innerDc, CancellationToken cancellationToken = default(CancellationToken))
{
    if (innerDc.Context.Activity.Type == ActivityTypes.Message)
    {
        var text = innerDc.Context.Activity.Text.ToLowerInvariant();

        if (text == "logout")
        {
            // The UserTokenClient encapsulates the authentication processes.
            var userTokenClient = innerDc.Context.TurnState.Get<UserTokenClient>();
            await userTokenClient.SignOutUserAsync(innerDc.Context.Activity.From.Id, ConnectionName, innerDc.Context.Activity.ChannelId, cancellationToken).ConfigureAwait(false);

            await innerDc.Context.SendActivityAsync(MessageFactory.Text("You have been signed out."), cancellationToken);
            return await innerDc.CancelAllDialogsAsync(cancellationToken);
        }
    }

    return null;
}

Aggiunta dell'autenticazione di Teams

OAuth viene gestito in modo diverso in Teams rispetto ad altri canali. L'esempio di bot di autenticazione di Teams (in C#, JavaScript, Java o Python) illustra come implementare correttamente l'autenticazione per Teams.

Altre risorse