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.
Abra Visual Studio.
Seleccione Project>Teams Toolkit>Add Authentication Code (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
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 comoaad.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 enidentifierUris
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 enreplyUrlsWithType
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 enenv/.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.
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 enenv/.env.{TEAMSFX_ENV}
.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}}" }
Actualice el
teamsapp.yml
archivo y elteamsapp.local.yml
archivo.Agregue cambios y configuraciones relacionados con Microsoft Entra a
yml
los archivos:Agregar
aadApp/create
enprovision
: 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
enprovision
: 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:- ClientId: Identificador de cliente de la aplicación Microsoft Entra.
- ClientSecret: secreto de cliente de la aplicación Microsoft Entra.
- 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 elteamsapp.local.yml
archivo, agregue el código siguiente en para crear laprovision
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}}
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.
- TeamsFx__Authentication__ClientId: Identificador de cliente de la aplicación Microsoft Entra.
- TeamsFx__Authentication__ClientSecret: Secreto de cliente de la aplicación Microsoft Entra.
- 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 enparameters
:"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) } }
La actualización
appsettings.json
yappsettings.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
yappsettings.Development.json
los archivos y actualice el código:"TeamsFx": { "Authentication": { "ClientId": "$clientId$", "ClientSecret": "$client-secret$", "InitiateLoginEndpoint": "$TAB_ENDPOINT$/auth-start.html", "OAuthAuthority": "$oauthAuthority$" } }
El entorno está listo y puede actualizar el código para agregar sso a la aplicación de Teams. Puede encontrar ejemplos:
- SDK de TeamsFx: https://www.nuget.org/packages/Microsoft.TeamsFx/
- Código de ejemplo: en
TeamsFx-Auth/Tab
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 aComponents/
.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`.
Para comprobar que la aplicación sso funciona según lo esperado, ejecute en
Local Debug
Visual Studio.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
Actualice el manifiesto de la aplicación Microsoft Entra en el
TeamsFx-Auth/aad.manifest.template.json
archivo.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 elenv/.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 elenv/.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.
-
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 enenv/.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 encommandLists
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}}" ]
- Debe
Actualización
teamsapp.yml
yteamsapp.local.yml
archivos: los cambios y configuraciones relacionados con Microsoft Entra deben agregarse a losyml
archivos:Agregue
aadApp/create
enprovision
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
enprovision
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:- ClientId: Identificador de cliente de la aplicación Microsoft Entra.
- ClientSecret: secreto de cliente de la aplicación Microsoft Entra.
- 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
yteamsapp.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
enprovision
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
Actualice las configuraciones relacionadas con Infra Microsoft Entra para configurar el servicio remoto. En el ejemplo siguiente se muestran las configuraciones en Azure Webapp.
- TeamsFx__Authentication__ClientId: Identificador de cliente de la aplicación Microsoft Entra.
- TeamsFx__Authentication__ClientSecret: Secreto de cliente de la aplicación Microsoft Entra.
- TeamsFx__Authentication__OAuthAuthority: Entidad de oauth de la aplicación Microsoft Entra.
- TeamsFx__Authentication__Bot__InitiateLoginEndpoint: página de inicio de autenticación del bot.
- TeamsFx__Authentication__ApplicationIdUri: la aplicación Microsoft Entra identifica los URI.
Ejemplo de plantilla de bot de TeamsFx:
Abra el
infra/azure.parameters.json
archivo y agregue el código aparameters
:"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.
Actualice el
appsettings.json
archivo y elappsettings.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
yappsettings.Development.json
los archivos y agregue el código:"TeamsFx": { "Authentication": { "ClientId": "$clientId$", "ClientSecret": "$client-secret$", "OAuthAuthority": "$oauthAuthority$", "ApplicationIdUri": "$applicationIdUri$", "Bot": { "InitiateLoginEndpoint": "$initiateLoginEndpoint$" } } }
Actualice el código para agregar el inicio de sesión único a la aplicación de Teams.
Puede encontrar código de ejemplo:
- SDK de TeamsFx: https://www.nuget.org/packages/Microsoft.TeamsFx/
- Código de ejemplo: en
TeamsFx-Auth/Bot
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
yTeamsFx-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>
Para comprobar si la aplicación sso funciona según lo esperado, ejecute en
Local Debug
Visual Studio.También puede ejecutar la aplicación en la nube seleccionando
Provision in the cloud
y, a continuación, seleccionandoDeploy to the cloud
actualizar la aplicación.
Vea también
- Introducción al kit de herramientas de Teams
- Requisitos previos para crear la aplicación de Teams
- Habilitación del inicio de sesión único para la aplicación de pestañas
- Habilitación del inicio de sesión único para el bot y la extensión de mensaje
- Preparación de cuentas para compilar la aplicación de Teams