Compartir a través de


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. Teams Toolkit facilita la interacción mediante la abstracción de algunos de los flujos de identificador de Microsoft Entra y las 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 Teams Toolkit para Visual Studio

Teams proporciona la función sso para una aplicación mediante el kit de herramientas de Microsoft Teams para Microsoft Visual Studio.

  1. Abra Visual Studio.

  2. Seleccione Project>Teams Toolkit>Add Authentication Code (Agregar código de autenticación).

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

Teams 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 las páginas de redirección de la aplicación Microsoft Entra y 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 la aplicación Microsoft Entra, 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 redireccionamiento 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 Teams para asegurarse de que la aplicación de autenticación se puede registrar en el servicio back-end e iniciar teams Toolkit al depurar o obtener una vista previa de la aplicación teams.

Aplicación de pestaña de Teams

  1. Actualizar manifiesto de aplicación de Microsoft Entra: 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}}"
          ]
      
    • replyUrlsWithType: muestra los valores de redirect_uri registrados que Microsoft Entra ID acepta como destinos al devolver tokens. Establezca los URI de redireccionamiento necesarios en replyUrlsWithType para devolver correctamente el token. Para obtener más información, vea atributo replyUrlsWithType.

          "replyUrlsWithType":[
        {
          "url": "${{TAB_ENDPOINT}}/auth-end.html",
          "type": "Web"
        }
      ]    
      

      Nota:

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

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

  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 teamsapp.yml archivo y el teamsapp.local.yml archivo.

    Agregue cambios y configuraciones relacionados con Microsoft Entra a yml los archivos:

    • Agregar aadApp/create en provision: Crear nuevas aplicaciones de Microsoft Entra usadas para el inicio de sesión único. Para obtener más información, vea aadApp/create.

    • Agregar aadApp/update en provision: Actualice la aplicación Microsoft Entra con el manifiesto de aplicación Microsoft Entra 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: Identificador de cliente de la aplicación Microsoft Entra.
      2. ClientSecret: secreto de cliente de la aplicación Microsoft Entra.
      3. OAuthAuthority: entidad de oauth de la aplicación Microsoft Entra.

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

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

      - 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 esperado de la aplicación Microsoft Entra.

    • Agregue las líneas siguientes en provision para configurar la aplicación Microsoft Entra con la plantilla de aplicación Microsoft Entra 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 del manifiesto de la aplicación Microsoft Entra que se indica en el paso 1. Por ejemplo: ./aad.manifest.json

    En el teamsapp.local.yml archivo:

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

         - 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. Es necesario configurar las configuraciones relacionadas con Infra Microsoft Entra en el servicio remoto. En el ejemplo siguiente se muestran las configuraciones en Azure Webapp.

    1. TeamsFx__Authentication__ClientId: Identificador de cliente de la aplicación Microsoft Entra.
    2. TeamsFx__Authentication__ClientSecret: Secreto de cliente de la aplicación Microsoft Entra.
    3. TeamsFx__Authentication__OAuthAuthority: Entidad de oauth de la aplicación Microsoft Entra.

    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 las configuraciones relacionadas con Microsoft Entra 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 el manifiesto de la aplicación Microsoft Entra 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 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.

    • replyUrlsWithType: 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 "replyUrlsWithType" para devolver correctamente el token. Para obtener más información, vea atributo replyUrlsWithType.

    Ejemplo:

    "replyUrlsWithType":[
      {
        "url": "https://${{BOT_DOMAIN}}/bot-auth-end.html",
        "type": "Web"
      }
    ]
    

    Nota:

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

    Ejemplo:

    "replyUrlsWithType":[
      {
      "url": "https://${{BOT_DOMAIN}}/bot-auth-end.html",
      "type": "Web"
      }
    ]
    
    • "name": reemplace el valor por el nombre esperado de la aplicación Microsoft Entra.
  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 teamsapp.yml y teamsapp.local.yml archivos: los cambios y configuraciones relacionados con Microsoft Entra deben agregarse a los yml archivos:

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

    • Agregue aadApp/update en provision para actualizar la aplicación Microsoft Entra con el manifiesto de la aplicación Microsoft Entra 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: Identificador de cliente de la aplicación Microsoft Entra.
      2. ClientSecret: secreto de cliente de la aplicación Microsoft Entra.
      3. OAuthAuthority: entidad de oauth de la aplicación Microsoft Entra. Para obtener más información, consulte file/updateJson.

    Ejemplo de plantilla de bot de TeamsFx

    En archivos teamsapp.yml y teamsapp.local.yml :

    • Agregue el código en provision para crear la aplicación Microsoft Entra.
    - 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 esperado de la aplicación Microsoft Entra.

    • Agregue el código de provision para configurar la aplicación Microsoft Entra con la plantilla de aplicación Microsoft Entra 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 del manifiesto de la aplicación Microsoft Entra que se indica en el paso 1. Por ejemplo, "./aad.manifest.json"

    En el teamsapp.local.yml archivo:

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

      - uses: file/createOrUpdateJsonFile
              with:
                target: ./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 las configuraciones relacionadas con Infra Microsoft Entra para configurar el servicio remoto. En el ejemplo siguiente se muestran las configuraciones en Azure Webapp.

    1. TeamsFx__Authentication__ClientId: Identificador de cliente de la aplicación Microsoft Entra.
    2. TeamsFx__Authentication__ClientSecret: Secreto de cliente de la aplicación Microsoft Entra.
    3. TeamsFx__Authentication__OAuthAuthority: Entidad de oauth de la aplicación Microsoft Entra.
    4. TeamsFx__Authentication__Bot__InitiateLoginEndpoint: página de inicio de autenticación del bot.
    5. TeamsFx__Authentication__ApplicationIdUri: la aplicación Microsoft Entra 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 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 las configuraciones relacionadas con Microsoft Entra 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 reemplace el código:
    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