Compartir vía


Incorporación del inicio de sesión único a la aplicación de Teams

Microsoft Teams proporciona una función de inicio de sesión único (SSO) para que una aplicación obtenga el token de usuario de Teams que ha iniciado sesión para acceder a Microsoft Graph y a otras API. Microsoft 365 Agents Toolkit (anteriormente conocido como Kit de herramientas de Teams) facilita la interacción mediante la abstracción de algunos de los flujos de Microsoft Entra ID e integraciones detrás de algunas API sencillas. Esto le permite agregar fácilmente características de SSO a la aplicación de Teams.

Habilitación del inicio de sesión único en Agents Toolkit para Visual Studio

Teams proporciona la función sso para una aplicación mediante Agents Toolkit para Microsoft Visual Studio.

  1. Abra Visual Studio.

  2. Seleccione ProjectMicrosoft 365 Agents Toolkit Add Authentication Code(Project > Microsoft 365 Agents Toolkit >Agregar código de autenticación).

    Captura de pantalla que muestra la opción para agregar código de autenticación.

Agents Toolkit le ayuda a generar los archivos de autenticación en la carpeta TeamsFx-Auth, incluido el archivo de plantilla de manifiesto de aplicación (anteriormente denominado manifiesto de aplicación de Teams) para Microsoft Entra páginas de redirección de la aplicación y la autenticación. Vincule los archivos a la aplicación de Teams actualizando las configuraciones de autenticación para asegurarse de que el inicio de sesión único funciona para la aplicación.

  • En el archivo de manifiesto de Microsoft Entra aplicación, especifique los URI (identificador uniforme de recursos), como el URI para identificar la aplicación de autenticación de Microsoft Entra y el URI de redirección para devolver el token.
  • En el archivo de manifiesto de la aplicación, agregue la aplicación sso para vincularla a la aplicación de Teams.
  • Agregue información de la aplicación sso en los archivos de configuración del Kit de herramientas de agentes para asegurarse de que la aplicación de autenticación se puede registrar en el servicio back-end e iniciar agents Toolkit al depurar o obtener una vista previa de la aplicación de Teams.

Aplicación de pestaña de Teams

  1. Actualizar Microsoft Entra manifiesto de aplicación: TeamsFx-Auth/aad.manifest.template.json el archivo es una plantilla de manifiesto de aplicación Microsoft Entra. Puede copiar y pegar este archivo en cualquier carpeta del proyecto y cambiar el nombre como aad.manifest.json y tomar nota de la ruta de acceso a este archivo. Las siguientes actualizaciones de la plantilla para crear o actualizar una aplicación de Microsoft Entra para SSO:

    • identifierUris: se usa para identificar y acceder de forma única al recurso. Establezca los URI de redireccionamiento correctos en identifierUris para identificar correctamente esta aplicación. Para obtener más información, vea atributo identifierUris.

          "identifierUris":[
            "api://${{TAB_DOMAIN}}/${{AAD_APP_CLIENT_ID}}"
          ]
      
    • redirectUris: muestra los valores de redirect_uri registrados que Microsoft Entra ID acepta como destinos al devolver tokens. Establezca los URI de redireccionamiento necesarios en redirectUris para devolver correctamente el token. Para obtener más información, vea atributo redirectUris.

          "web": {
          "redirectUris": [
           "${{TAB_ENDPOINT}}/auth-end.html"
          ]
          }
      

      Nota:

      Use ${{ENV_NAME}} para hacer referencia a variables en env/.env.{TEAMSFX_ENV}.

          "web": {
           "redirectUris": [
            "${{TAB_ENDPOINT}}/auth-end.html"
           ]
          },
          "spa": {
           "redirectUris": [
            "${{TAB_ENDPOINT}}/auth-end.html?clientId=${{AAD_APP_CLIENT_ID}}",
            "${{TAB_ENDPOINT}}/blank-auth-end.html"
           ]
          }
      
    • "name": reemplaza el valor por el nombre de la aplicación de Microsoft Entra esperado.

  2. Abra el archivo de manifiesto de la aplicación y agregue WebApplicationInfo la propiedad con el valor de la aplicación sso. Para obtener más información, consulte webApplicationInfo.

        "webApplicationInfo": {
          "id": "${{AAD_APP_CLIENT_ID}}",
          "resource": "SAME_AS_YOUR_IDENTIFIERURIS"
        }
    

    Nota:

    Actualice el valor del recurso a identifierUris la configuración del paso 1 y úsela para hacer ${{ENV_NAME}} referencia a envs en env/.env.{TEAMSFX_ENV}.

  3. Abra el appPackage/manifest.json archivo y agregue el código siguiente:

    "webApplicationInfo": {
      "id": "${{AAD_APP_CLIENT_ID}}",
      "resource": "api://${{TAB_DOMAIN}}/${{AAD_APP_CLIENT_ID}}"
    }
    
  4. Actualice el m365agents.yml archivo y el m365agents.local.yml archivo.

    Agregue Microsoft Entra cambios y configuraciones relacionados en yml los archivos:

    • Agregue aadApp/create en provision: Cree nuevas aplicaciones de Microsoft Entra que se usan para el inicio de sesión único. Para obtener más información, vea aadApp/create.

      Nota:

      Puede agregar los parámetros que faltan en writeToEnvironmentFile directamente en el archivo .yml.

    • Agregue aadApp/update en provision: actualice la aplicación de Microsoft Entra con Microsoft Entra manifiesto de aplicación en el paso 1. Para obtener más información, vea aadApp/update.

    • Actualizar file/createOrUpdateJsonFile: agregue las siguientes variables de entorno al depurar localmente:

      1. ClientId: Microsoft Entra identificador de cliente de la aplicación.
      2. ClientSecret: Microsoft Entra secreto de cliente de la aplicación.
      3. OAuthAuthority: Microsoft Entra entidad de oauth de la aplicación.

      Para obtener más información, consulte file/updateJson.

    • En el m365agents.yml archivo y en el m365agents.local.yml archivo, agregue el código siguiente en provision para crear Microsoft Entra aplicación.

      - uses: aadApp/create
        with:
          name: "YOUR_AAD_APP_NAME"
          generateClientSecret: true
          signInAudience: "AzureADMyOrg"
        writeToEnvironmentFile:
          clientId: AAD_APP_CLIENT_ID
          clientSecret: SECRET_AAD_APP_CLIENT_SECRET
          objectId: AAD_APP_OBJECT_ID
          tenantId: AAD_APP_TENANT_ID
          authority: AAD_APP_OAUTH_AUTHORITY
          authorityHost: AAD_APP_OAUTH_AUTHORITY_HOST
      

      Nota:

      Reemplace el valor de "name" por el nombre de la aplicación Microsoft Entra esperada.

    • Agregue las líneas siguientes en provision para configurar Microsoft Entra aplicación con Microsoft Entra plantilla de aplicación en el paso 1.

      - uses: aadApp/update
        with:
          manifestPath: "YOUR_PATH_TO_AAD_APP_MANIFEST"
          outputFilePath : ./build/aad.manifest.${{TEAMSFX_ENV}}.json
      

      Nota:

      Reemplace el valor de manifestPath por la ruta de acceso relativa de Microsoft Entra manifiesto de aplicación que se indica en el paso 1. Por ejemplo: ./aad.manifest.json

    En el m365agents.local.yml archivo:

    • Agregue el código siguiente en provision para agregar Microsoft Entra configuraciones relacionadas al servicio de depuración local.

      Nota:

      Si la file/createOrUpdateJsonFile sección está configurada en m365agents.local.yml, puede omitir el paso siguiente.

         - uses: file/createOrUpdateJsonFile
           with:
             target: ./appsettings.Development.json
             appsettings:
               TeamsFx:
                 Authentication:
                   ClientId: ${{AAD_APP_CLIENT_ID}}
                   ClientSecret: ${{SECRET_AAD_APP_CLIENT_SECRET}}
                   InitiateLoginEndpoint: ${{TAB_ENDPOINT}}/auth-start.html
                   OAuthAuthority: ${{AAD_APP_OAUTH_AUTHORITY}}
      
  5. Actualice Infra Microsoft Entra las configuraciones relacionadas deben configurarse en el servicio remoto. En el ejemplo siguiente se muestran las configuraciones en Azure Webapp.

    1. TeamsFx__Authentication__ClientId: Microsoft Entra identificador de cliente de la aplicación.
    2. TeamsFx__Authentication__ClientSecret: Microsoft Entra secreto de cliente de la aplicación.
    3. TeamsFx__Authentication__OAuthAuthority: Microsoft Entra entidad de oauth de la aplicación.

    Ejemplo de plantilla de la pestaña TeamsFx.

    Abra infra/azure.parameters.json y agregue las siguientes líneas en parameters:

    "tabAadAppClientId": {
     "value": "${{AAD_APP_CLIENT_ID}}"
    },
    "tabAadAppClientSecret": {
     "value": "${{SECRET_AAD_APP_CLIENT_SECRET}}"
    },
    "tabAadAppOauthAuthorityHost": {
     "value": "${{AAD_APP_OAUTH_AUTHORITY_HOST}}"
    },
    "tabAadAppTenantId": {
     "value": "${{AAD_APP_TENANT_ID}}"
    }
    

    Abra el infra/azure.bicep archivo y busque el código:

    param location string = resourceGroup().location
    

    Actualice el código como:

    param tabAadAppClientId string
    param tabAadAppOauthAuthorityHost string
    param tabAadAppTenantId string
    @secure()
    param tabAadAppClientSecret string
    

    En el infra/azure.bicep archivo, busque el código:

    resource webApp 'Microsoft.Web/sites@2021-02-01' = {
       kind: 'app'
       location: location
       name: webAppName
       properties: {
         serverFarmId: serverfarm.id
         httpsOnly: true
         siteConfig: {
           appSettings: [
             {
               name: 'WEBSITE_RUN_FROM_PACKAGE'
               value: '1'
             }
           ]
           ftpsState: 'FtpsOnly'
         }
       }
     }
    

    Actualice el código como:

    resource webApp 'Microsoft.Web/sites@2021-02-01' = {
       kind: 'app'
       location: location
       name: webAppName
       properties: {
         serverFarmId: serverfarm.id
         httpsOnly: true
         siteConfig: {
           ftpsState: 'FtpsOnly'
         }
       }
     }
    
     resource  webAppConfig  'Microsoft.Web/sites/config@2021-02-01' = {
       name: '${webAppName}/appsettings'
       properties: {
         WEBSITE_RUN_FROM_PACKAGE: '1'
         TeamsFx__Authentication__ClientId: tabAadAppClientId
         TeamsFx__Authentication__ClientSecret: tabAadAppClientSecret
         TeamsFx__Authentication__InitiateLoginEndpoint: 'https://${webApp.properties.defaultHostName}/auth-start.html'
         TeamsFx__Authentication__OAuthAuthority: uri(tabAadAppOauthAuthorityHost, tabAadAppTenantId)
       }
     }
    
  6. La actualización appsettings.json y appsettings.Development.json los archivos de Microsoft Entra configuraciones relacionadas deben configurarse en la configuración del proyecto de .NET:

    TeamsFx: {
          Authentication: {
            ClientId: AAD app client id
            ClientSecret: AAD app client secret,
            InitiateLoginEndpoint: Login Endpoint,
            OAuthAuthority: AAD app oauth authority
          }
        }
    

    Nota:

    Puede usar para hacer $ENV_NAME$ referencia a las envs en el servicio local o remoto.

    Ejemplo de plantilla de la pestaña TeamsFx.

    Abra appsettings.json y appsettings.Development.json los archivos y actualice el código:

    "TeamsFx": { 
         "Authentication": { 
           "ClientId": "$clientId$", 
           "ClientSecret": "$client-secret$",
           "InitiateLoginEndpoint": "$TAB_ENDPOINT$/auth-start.html",
           "OAuthAuthority": "$oauthAuthority$"
         } 
       }
    
  7. El entorno está listo y puede actualizar el código para agregar sso a la aplicación de Teams. Puede encontrar ejemplos:

    Ejemplo de plantilla de la pestaña TeamsFx.

    • Cree Config.cs y actualice el código como:

      using Microsoft.TeamsFx.Configuration;
      
           namespace {{YOUR_NAMESPACE}}
           {
               public class ConfigOptions
               {
                   public TeamsFxOptions TeamsFx { get; set; }
               }
               public class TeamsFxOptions
               {
                   public AuthenticationOptions Authentication { get; set; }
               }
           }
      

      Nota:

      Debe reemplazar por {{YOUR_NAMESPACE}} el nombre del espacio de nombres.

    • Mueva el TeamsFx-Auth/Tab/GetUserProfile.razor archivo a Components/.

    • Agregue el componente a la GetUserProfile página de Razor, por ejemplo:

      <h1>Hello, World</h1>
      <GetUserProfile />
      
    • Abra el Program.cs archivo y busque el código:

      builder.Services.AddScoped<MicrosoftTeams>();
      

      y actualice el código como:

                var config = builder.Configuration.Get<ConfigOptions>();
                builder.Services.AddTeamsFx(config.TeamsFx.Authentication);
          ```
      
      

    Nota:

    Debe excluir el código de ejemplo en el TeamsFx-Auth archivo para evitar errores de compilación agregando el .csproj código siguiente al archivo:

        <ItemGroup>
        <Compile Remove="TeamsFx-Auth/**/*" />
        <None Include="TeamsFx-Auth/**/*" />
        <Content Remove="TeamsFx-Auth/Tab/GetUserProfile.razor"/>
      </ItemGroup>
        ```
    
    * Download `auth-start.html` and `auth-end.html` files from [GitHub Repo](https://github.com/OfficeDev/TeamsFx/tree/dev/templates/csharp/sso-tab/wwwroot) to `{ProjectDirectory}/wwwroot`.
    
    
  8. Para comprobar que la aplicación sso funciona según lo esperado, ejecute en Local Debug Visual Studio.

  9. También puede ejecutar la aplicación en la nube seleccionando Provision in the cloud y, a continuación, Deploy to the cloud.

Aplicación de bot de Teams

  1. Actualice Microsoft Entra manifiesto de aplicación en el TeamsFx-Auth/aad.manifest.template.json archivo.

  2. Puede copiar el archivo en cualquier carpeta del proyecto y cambiar el aad.manifest.json nombre como archivo y anotar la ruta de acceso a este archivo para referencia posterior. Realice las siguientes actualizaciones en la plantilla para crear o actualizar una aplicación de Microsoft Entra para sso.

    • identifierUris: se usa para identificar y acceder al recurso de forma única. Debe establecer los URI de redireccionamiento correctos en "identifierUris" para identificar correctamente esta aplicación. Para obtener más información, vea atributo identifierUris.

    Ejemplo de plantilla de bot de TeamsFx:

    "identifierUris":[
      "api://botid-${{BOT_ID}}"
    ]
    

    Nota:

    Puede usar para hacer ${{ENV_NAME}} referencia a variables en el env/.env.{TEAMSFX_ENV} archivo.

    • redirectUris: muestra los valores de redirect_uri registrados que Microsoft Entra ID acepta como destinos al devolver tokens. Debe establecer los URI de redireccionamiento necesarios en "redirectUris" para devolver correctamente el token. Para obtener más información, vea atributo redirectUris.

    Ejemplo:

    "web": {
     "redirectUris": [
      "https://${{BOT_DOMAIN}}/bot-auth-end.html"
     ]
    }
    
    • "name": reemplace el valor por el nombre de la aplicación de Microsoft Entra esperado.
  3. Actualizar manifiesto de aplicación.

    • Debe WebApplicationInfo agregarse un objeto al manifiesto de la aplicación para habilitar el inicio de sesión único en la aplicación de Teams. Para obtener más información, consulte webApplicationInfo.

    Por ejemplo: abra la plantilla de manifiesto de aplicación y anexe el siguiente objeto en el manifiesto de la aplicación:

    "webApplicationInfo": {
      "id": "${{AAD_APP_CLIENT_ID}}",
      "resource": "SAME_AS_YOUR_IDENTIFIERURIS"
    }
    

    Nota:

    Debe actualizar el valor del recurso a su identifierUris configurado en el paso 1.i y usar para hacer ${{ENV_NAME}} referencia a los envs en env/.env.{TEAMSFX_ENV}.

    Ejemplo de plantilla de bot de TeamsFx:

    Abra el appPackage/manifest.json archivo y agregue la siguiente propiedad en el archivo de manifiesto de la aplicación:

    "webApplicationInfo": {
      "id": "${{AAD_APP_CLIENT_ID}}",
      "resource": "api://botid-${{BOT_ID}}"
    }
    
    • Puede registrar el comando en commands en en commandLists el bot:
    {
      "title": "YOUR_COMMAND_TITLE",
      "description": "YOUR_COMMAND_DESCRIPTION"
    }
    

    Ejemplo de plantilla de bot de TeamsFx:

    {
      "title": "show",
      "description": "Show user profile using Single Sign On feature"
    }
    

    No olvide eliminar el comando "helloWorld" anterior, ya que no se usa.

    • Agregue también un dominio de bot a validDomain:
    "validDomains": [
      "${{BOT_DOMAIN}}"
    ]
    
  4. Actualización m365agents.yml y m365agents.local.yml archivos: Microsoft Entra cambios y configuraciones relacionados deben agregarse a yml los archivos:

    • Agregue aadApp/create en provision para crear nuevas aplicaciones de Microsoft Entra que se usan para el inicio de sesión único. Para obtener más información, consulte acciones disponibles en Agents Toolkit.

      Nota:

      Puede agregar los parámetros que faltan en writeToEnvironmentFile directamente en el archivo .yml.

    • Agregue aadApp/update en provision para actualizar la aplicación de Microsoft Entra con Microsoft Entra manifiesto de aplicación en el paso 1. Para obtener más información, vea aadApp/update.

    • Actualice file/createOrUpdateJson Archivo para agregar las siguientes variables de entorno durante la depuración local:

      1. ClientId: Microsoft Entra identificador de cliente de la aplicación.
      2. ClientSecret: Microsoft Entra secreto de cliente de la aplicación.
      3. OAuthAuthority: Microsoft Entra entidad de oauth de la aplicación. Para obtener más información, consulte file/updateJson.

    Ejemplo de plantilla de bot de TeamsFx

    En archivos m365agents.yml y m365agents.local.yml :

    • Agregue el código en provision para crear Microsoft Entra aplicación.

      Nota:

      Si falta la aadApp/create sección en provision el archivo .yml, puede copiar y pegar la sección necesaria en él.

    - uses: aadApp/create
         with:
           name: "YOUR_AAD_APP_NAME"
           generateClientSecret: true
           signInAudience: "AzureADMyOrg"
         writeToEnvironmentFile:
             clientId: AAD_APP_CLIENT_ID
             clientSecret: SECRET_AAD_APP_CLIENT_SECRET
             objectId: AAD_APP_OBJECT_ID
             tenantId: AAD_APP_TENANT_ID
             authority: AAD_APP_OAUTH_AUTHORITY
             authorityHost: AAD_APP_OAUTH_AUTHORITY_HOST
    

    Nota:

    Reemplace el valor de "name" por el nombre de la aplicación Microsoft Entra esperada.

    • Agregue el código de provision para configurar Microsoft Entra aplicación con Microsoft Entra plantilla de aplicación en el paso 1.

      - uses: aadApp/update
              with:
                manifestPath: "./aad.manifest.json"
                outputFilePath : ./build/aad.manifest.${{TEAMSFX_ENV}}.json
      

      Nota:

      Reemplace el valor de "manifestPath" por la ruta de acceso relativa de Microsoft Entra manifiesto de aplicación que se indica en el paso 1. Por ejemplo, "./aad.manifest.json"

    En el m365agents.local.yml archivo:

    • Actualice file/createOrUpdateJsonFile en provision para agregar Microsoft Entra configuraciones relacionadas al servicio de depuración local.

      Nota:

      Si la file/createOrUpdateJsonFile sección está configurada en m365agents.local.yml, puede omitir el paso siguiente.

      - uses: file/createOrUpdateJsonFile
              with:
                target: ../ProjecName/appsettings.Development.json
                appsettings:
                  BOT_ID: ${{BOT_ID}}
                  BOT_PASSWORD: ${{SECRET_BOT_PASSWORD}}
                  TeamsFx:
                    Authentication:
                      ClientId: ${{AAD_APP_CLIENT_ID}}
                      ClientSecret: ${{SECRET_AAD_APP_CLIENT_SECRET}}
                      OAuthAuthority: ${{AAD_APP_OAUTH_AUTHORITY}}/${{AAD_APP_TENANT_ID}}
                      ApplicationIdUri: api://botid-${{BOT_ID}}
                      Bot:
                        InitiateLoginEndpoint: https://${{BOT_DOMAIN}}/bot-auth-start
      
  5. Actualice Infra Microsoft Entra configuraciones relacionadas para configurar el servicio remoto. En el ejemplo siguiente se muestran las configuraciones en Azure Webapp.

    1. TeamsFx__Authentication__ClientId: Microsoft Entra identificador de cliente de la aplicación.
    2. TeamsFx__Authentication__ClientSecret: Microsoft Entra secreto de cliente de la aplicación.
    3. TeamsFx__Authentication__OAuthAuthority: Microsoft Entra entidad de oauth de la aplicación.
    4. TeamsFx__Authentication__Bot__InitiateLoginEndpoint: página de inicio de autenticación del bot.
    5. TeamsFx__Authentication__ApplicationIdUri: Microsoft Entra aplicación identifica los URI.

    Ejemplo de plantilla de bot de TeamsFx:

    Abra el infra/azure.parameters.jsonarchivo y agregue el código a parameters:

    "m365ClientId": {
      "value": "${{AAD_APP_CLIENT_ID}}"
    },
    "m365ClientSecret": {
      "value": "${{SECRET_AAD_APP_CLIENT_SECRET}}"
    },
    "m365TenantId": {
      "value": "${{AAD_APP_TENANT_ID}}"
    },
    "m365OauthAuthorityHost": {
      "value": "${{AAD_APP_OAUTH_AUTHORITY_HOST}}"
    }
    

    Abra el infra/azure.bicep archivo y busque el código:

    param location string = resourceGroup().location
    

    Actualice el código como:

    param location string = resourceGroup().location
    param m365ClientId string
    param m365TenantId string
    param m365OauthAuthorityHost string
    param m365ApplicationIdUri string = 'api://botid-${botAadAppClientId}'
    @secure()
    param m365ClientSecret string
    

    Agregue el código antes de la salida:

    resource webAppSettings 'Microsoft.Web/sites/config@2021-02-01' = {
      name: '${webAppName}/appsettings'
      properties: {
          TeamsFx__Authentication__ClientId: m365ClientId
          TeamsFx__Authentication__ClientSecret: m365ClientSecret
          TeamsFx__Authentication__Bot__InitiateLoginEndpoint: uri('https://${webApp.properties.defaultHostName}', 'bot-auth-start')
          TeamsFx__Authentication__OAuthAuthority: uri(m365OauthAuthorityHost, m365TenantId)
          TeamsFx__Authentication__ApplicationIdUri: m365ApplicationIdUri
          BOT_ID: botAadAppClientId
          BOT_PASSWORD: botAadAppClientSecret
          RUNNING_ON_AZURE: '1'
      }
    }
    

    Nota:

    Si desea agregar configuraciones adicionales a la aplicación web de Azure, agregue las configuraciones en webAppSettings.

  6. Actualice el appsettings.json archivo y el appsettings.Development.json archivo para Microsoft Entra configuraciones relacionadas que deben configurarse en la configuración del proyecto de .NET:

    TeamsFx: {
      Authentication: {
        ClientId: AAD app client id
        ClientSecret: AAD app client secret,
        OAuthAuthority: AAD app oauth authority,
        ApplicationIdUri: AAD app identify uri,
        Bot: {
          InitiateLoginEndpoint: Auth start page for Bot
        }
      }
    }
    

    Nota:

    Puede usar para hacer $ENV_NAME$ referencia a las envs en el servicio local o remoto.

    Ejemplo de plantilla de bot de TeamsFx:

    Abra appsettings.json y appsettings.Development.json los archivos y agregue el código:

    "TeamsFx": {
      "Authentication": {
        "ClientId": "$clientId$",
        "ClientSecret": "$client-secret$",
        "OAuthAuthority": "$oauthAuthority$",
        "ApplicationIdUri": "$applicationIdUri$",
        "Bot": {
          "InitiateLoginEndpoint": "$initiateLoginEndpoint$"
        }
      }
    }
    
  7. Actualice el código para agregar el inicio de sesión único a la aplicación de Teams.

    Puede encontrar código de ejemplo:

    Ejemplo de plantilla de bot de TeamsFx:

    • Abra Config.cs y agregue las siguientes clases al espacio de nombres:
    using Microsoft.TeamsFx.Configuration;
    
    namespace {{YOUR_NAMESPACE}}
    {
        public class TeamsFxOptions
        {
            public AuthenticationOptions Authentication { get; set; }
        }
    
        public class ConfigOptions
        {
            public string BOT_ID { get; set; }
            public string BOT_PASSWORD { get; set; }
            public TeamsFxOptions TeamsFx { get; set; }
        }
    }
    

    Nota:

    Reemplace la propiedad por el {{YOUR_NAMESPACE}} nombre del espacio de nombres.

    • Mueva TeamsFx-Auth/Bot/SSO y TeamsFx-Auth/Bot/Pages los archivos a /.

      Nota:

      No olvide reemplazar por {{YOUR_NAMESPACE}} el espacio de nombres del proyecto.

    • Abra el Program.cs archivo y busque el código:

    builder.Services.AddSingleton<BotFrameworkAuthentication, ConfigurationBotFrameworkAuthentication>();
    

    Actualice el código como:

    builder.Services.AddRazorPages();
    
    // Create the Bot Framework Adapter with error handling enabled.                                        
    builder.Services.AddSingleton<IBotFrameworkHttpAdapter, AdapterWithErrorHandler>();
    
    builder.Services.AddSingleton<IStorage, MemoryStorage>();
    // Create the Conversation state. (Used by the Dialog system itself.)
    builder.Services.AddSingleton<ConversationState>();
    
    // The Dialog that will be run by the bot.
    builder.Services.AddSingleton<SsoDialog>();
    
    // Create the bot as a transient. In this case the ASP Controller is expecting an IBot.
    builder.Services.AddTransient<IBot, TeamsSsoBot<SsoDialog>>();
    
    builder.Services.AddOptions<BotAuthenticationOptions>().Configure(options =>
    {
      options.ClientId = config.TeamsFx.Authentication.ClientId;
      options.ClientSecret = config.TeamsFx.Authentication.ClientSecret;
      options.OAuthAuthority = config.TeamsFx.Authentication.OAuthAuthority;
      options.ApplicationIdUri = config.TeamsFx.Authentication.ApplicationIdUri;
      options.InitiateLoginEndpoint = config.TeamsFx.Authentication.Bot.InitiateLoginEndpoint;
    });
    

    Busque el código:

    builder.Services.AddSingleton<HelloWorldCommandHandler>();
    builder.Services.AddSingleton(sp =>
    {
      var options = new ConversationOptions()
      {
        Adapter = sp.GetService<CloudAdapter>(),
        Command = new CommandOptions()
        {
          Commands = new List<ITeamsCommandHandler> { sp.GetService<HelloWorldCommandHandler>() }
        }
      };
    
      return new ConversationBot(options);
    });
    

    Actualice el código como:

    builder.Services.AddSingleton(sp =>
    {
      var options = new ConversationOptions()
      {
        Adapter = sp.GetService<CloudAdapter>(),
        Command = new CommandOptions()
        {
          Commands = new List<ITeamsCommandHandler> { }
        }
      };
    
      return new ConversationBot(options);
    });
    

    Busque y elimine el código:

    // Create the bot as a transient. In this case the ASP Controller is expecting an IBot.
    builder.Services.AddTransient<IBot, TeamsBot>();
    

    Busque el código:

    app.UseEndpoints(endpoints =>
    {
      endpoints.MapControllers();
    });
    

    Actualice el código como:

    app.UseEndpoints(endpoints =>
    {
      endpoints.MapControllers();
      endpoints.MapRazorPages();
    });
    

    Nota:

    Debe excluir el código de ejemplo de TeamsFx-Auth para evitar errores de compilación agregando el código siguiente al .csproj archivo:

    <ItemGroup>
      <Compile Remove="TeamsFx-Auth/**/*" />
      <None Include="TeamsFx-Auth/**/*" />
      <Content Remove="TeamsFx-Auth/Tab/GetUserProfile.razor"/>
    </ItemGroup>
    
  8. Para comprobar si la aplicación sso funciona según lo esperado, ejecute en Local Debug Visual Studio.

  9. También puede ejecutar la aplicación en la nube seleccionando Provision in the cloud y, a continuación, seleccionando Deploy to the cloud actualizar la aplicación.

Vea también