Creare dinamicamente un'identità e un token di Servizi di comunicazione di Azure

In questo esercizio si apprenderà come recuperare dinamicamente i valori di identità utente e token da Servizi di comunicazione di Azure usando Funzioni di Azure. Una volta recuperati, i valori verranno passati al composito dell'interfaccia utente ACS per consentire l'esecuzione di una chiamata da parte di un cliente.

Creare un'identità e un token ACS

  1. Aprire local.settings.json e aggiornare il ACS_CONNECTION_STRING valore con la stringa di connessione ACS salvata in un esercizio precedente.

  2. Aprire Startup.cs in Visual Studio ed esplorare la seconda AddSingleton() chiamata all'interno del metodo ConfigureServices().

    var host = new HostBuilder()
        .ConfigureFunctionsWebApplication()
        .ConfigureServices(services => {
    
            ...
    
            services.AddSingleton(static p =>
            {
                var config = p.GetRequiredService<IConfiguration>();
                var connectionString = config.GetValue<string>("ACS_CONNECTION_STRING");
                return new CommunicationIdentityClient(connectionString);
            });
    
            ...
    
        })
        .Build();
    }
    
  3. La AddSingleton() chiamata crea un CommunicationIdentityClient oggetto usando il ACS_CONNECTION_STRING valore di local.settings.json.

  4. Aprire ACSTokenFunction.cs e individuare il costruttore e le definizioni dei campi.

    • Viene definito un campo denominato Scopes che include l'ambito CommunicationTokenScope.VoIP . Questo ambito viene usato per creare il token di accesso per la videochiamata.

      private static readonly CommunicationTokenScope[] Scopes =
      [
          CommunicationTokenScope.VoIP,
      ];
      
    • L'istanza CommunicationIdentityClient singleton creata in Startup.cs viene inserita nel costruttore e assegnata al _tokenClient campo.

      private readonly CommunicationIdentityClient _tokenClient;
      
      public ACSTokenFunction(CommunicationIdentityClient tokenClient)
      {
          _tokenClient = tokenClient;
      }
      
  5. Esplora il Run() metodo in ACSTokenFunction.cs:

    [Function("HttpTriggerAcsToken")]
    public async Task<HttpResponseData> Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)] HttpRequestData req,
        ILogger log)
    {
        var user = await _tokenClient.CreateUserAsync();
        var userToken = await _tokenClient.GetTokenAsync(user, Scopes);
    
        var response = req.CreateResponse(HttpStatusCode.OK);
        await response.WriteAsJsonAsync(
            new
            {
                userId = user.Value.Id,
                userToken.Value.Token,
                userToken.Value.ExpiresOn
            }
        );
        return response;
    }
    
    • Definisce una funzione denominata di HttpTriggerAcsToken che può essere chiamata con una richiesta HTTP GET.
    • Un nuovo utente ACS viene creato chiamando il _tokenClient.CreateUserAsync() metodo .
    • Un token di accesso usato per le videochiamate viene creato chiamando il _tokenClient. GetTokenAsync() metodo .
    • L'ID utente e il token vengono restituiti dalla funzione come oggetto JSON.
  6. Eseguire il programma premendo F5 in Visual Studio o selezionando Debug -> Avvia debug dal menu. Verrà avviato il progetto di Azure Functions e rendere ACSTokenFunction disponibile per le chiamate.

    Annotazioni

    Se si usa VS Code, è possibile aprire una finestra del terminale nella cartella GraphACSFunctions ed eseguire func start. Si presuppone che nel computer siano installati gli strumenti di base di Funzioni di Azure .

  7. Ora che le Funzioni di Azure sono in esecuzione in locale, il client deve essere in grado di chiamarle per ottenere l'identità utente ACS e i valori del token.

  8. Aprire il file samples/acs-to-teams-meeting/client/react/App.tsx nell'editor.

  9. Individuare le userId variabili di stato e token nel componente. Rimuovere i valori hardcoded e sostituirli con virgolette vuote:

    const [userId, setUserId] = useState<string>('');
    const [token, setToken] = useState<string>('');
    
  10. Individuare la useEffect funzione e modificarla in modo che sia simile alla seguente per abilitare la chiamata alla funzione di Azure per recuperare un'identità utente e un token ACS:

    useEffect(() => {
        const init = async () => {
            setMessage('Getting ACS user');
            //Call Azure Function to get the ACS user identity and token
            let res = await fetch(process.env.REACT_APP_ACS_USER_FUNCTION as string);
            let user = await res.json();
            setUserId(user.userId);
            setToken(user.token);
    
            setMessage('Getting Teams meeting link...');
            //Call Azure Function to get the meeting link
            res = await fetch(process.env.REACT_APP_TEAMS_MEETING_FUNCTION as string);
            let link = await res.text();
            setTeamsMeetingLink(link);
            setMessage('');
            console.log('Teams meeting link', link);
        }
        init();
    
    }, []);
    
  11. Salvare il file prima di continuare.

  12. Aprire una finestra del terminale ed eseguire npm start nella react cartella . Dopo la compilazione e il caricamento, verrà visualizzata l'interfaccia utente chiamante ACS ed è possibile chiamare la riunione di Teams creata dinamicamente da Microsoft Graph.

  13. Arrestare l'app React premendo CTRL+C nella finestra del terminale.

  14. Arresta il progetto Funzioni di Azure.

  15. Eseguire il commit delle modifiche Git ed eseguirne il push nel repository GitHub usando Visual Studio Code:

    • Selezionare l'icona Controllo del codice sorgente (terza giù nella barra degli strumenti di Visual Studio Code).
    • Immettere un messaggio di commit e selezionare Commit.
    • Seleziona Sincronizza modifiche.

Passaggio successivo