Adicionar o início de sessão único à sua aplicação Teams
O Microsoft Teams fornece uma função de início de sessão único (SSO) para uma aplicação obter o token de utilizador com sessão iniciada no Teams para aceder ao Microsoft Graph e a outras APIs. O Teams Toolkit facilita a interação ao abstrair alguns dos fluxos e integrações do Microsoft Entra ID por trás de algumas APIs simples. Isto permite-lhe adicionar facilmente funcionalidades de SSO à sua aplicação Teams.
Ativar o Início de Sessão Único no Teams Toolkit para Visual Studio
O Teams fornece a função SSO para uma aplicação com o Microsoft Teams Toolkit para Microsoft Visual Studio.
Abra o Visual Studio.
Selecione Project>Teams Toolkit>Adicionar Código de Autenticação.
O Teams Toolkit ajuda-o a gerar os ficheiros de autenticação na pasta TeamsFx-Auth , incluindo o ficheiro de modelo de manifesto de aplicação (anteriormente denominado manifesto de aplicação do Teams) para a aplicação Microsoft Entra e páginas de redirecionamento de autenticação. Ligue os ficheiros à sua aplicação do Teams ao atualizar as configurações de autenticação para garantir que o SSO funciona para a sua aplicação.
- No ficheiro de manifesto da aplicação Microsoft Entra, especifique os URIs (Uniform Resource Identifier), como, por exemplo, o URI para identificar a aplicação de autenticação Microsoft Entra e o URI de redirecionamento para devolver o token.
- No ficheiro de manifesto da aplicação, adicione a aplicação SSO para a associar à aplicação Teams.
- Adicione informações da aplicação SSO nos ficheiros de configuração do Teams Toolkit para garantir que a aplicação de autenticação pode ser registada no serviço de back-end e iniciar o Teams Toolkit quando estiver a depurar ou pré-visualizar a aplicação Teams.
Aplicativo de guia do Teams
Atualizar o manifesto da aplicação Microsoft Entra:
TeamsFx-Auth/aad.manifest.template.json
o ficheiro é um modelo de manifesto da aplicação Microsoft Entra. Pode copiar e colar este ficheiro em qualquer pasta do seu projeto, mudar o nome comoaad.manifest.json
e tomar nota do caminho para este ficheiro. As seguintes atualizações no modelo para criar/atualizar uma aplicação Microsoft Entra para SSO:identifierUris
: é utilizado para identificar e aceder exclusivamente ao recurso. Defina os URIs de redirecionamento corretos paraidentifierUris
para identificar com êxito esta aplicação. Para obter mais informações, veja o atributo identifierUris."identifierUris":[ "api://${{TAB_DOMAIN}}/${{AAD_APP_CLIENT_ID}}" ]
replyUrlsWithType
: lista os valores de redirect_uri registados que o ID do Microsoft Entra aceita como destinos ao devolver tokens. Defina os URIs de redirecionamento necessários parareplyUrlsWithType
para devolver o token com êxito. Para obter mais informações, veja o atributo replyUrlsWithType."replyUrlsWithType":[ { "url": "${{TAB_ENDPOINT}}/auth-end.html", "type": "Web" } ]
Observação
Utilize
${{ENV_NAME}}
para referenciar variáveis emenv/.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": substitui o valor pelo nome da aplicação Microsoft Entra esperado.
Abra o ficheiro de manifesto da aplicação e adicione
WebApplicationInfo
a propriedade com o valor da sua aplicação SSO. Para obter mais informações, consulte webApplicationInfo."webApplicationInfo": { "id": "${{AAD_APP_CLIENT_ID}}", "resource": "SAME_AS_YOUR_IDENTIFIERURIS" }
Observação
Atualize o valor do recurso para o configurado
identifierUris
no passo 1 e utilize${{ENV_NAME}}
para referenciar envs noenv/.env.{TEAMSFX_ENV}
.Abra o
appPackage/manifest.json
ficheiro e adicione o seguinte código:"webApplicationInfo": { "id": "${{AAD_APP_CLIENT_ID}}", "resource": "api://${{TAB_DOMAIN}}/${{AAD_APP_CLIENT_ID}}" }
Atualize o
teamsapp.yml
ficheiro e oteamsapp.local.yml
ficheiro.Adicione alterações e configurações relacionadas com o Microsoft Entra aos seus
yml
ficheiros:Adicione
aadApp/create
emprovision
: Criar novas aplicações Microsoft Entra utilizadas para SSO. Para obter mais informações, veja aadApp/create.Adicione
aadApp/update
emprovision
: Atualize a aplicação Microsoft Entra com o manifesto da aplicação Microsoft Entra no passo 1. Para obter mais informações, veja aadApp/update.Atualização
file/createOrUpdateJsonFile
: adicione as seguintes variáveis de ambiente ao depurar localmente:- ClientId: ID de cliente da aplicação Microsoft Entra.
- ClientSecret: segredo do cliente da aplicação Microsoft Entra.
- OAuthAuthority: Autoridade de oauth da aplicação Microsoft Entra.
Para obter mais informações, veja file/updateJson.
teamsapp.yml
No ficheiro e noteamsapp.local.yml
ficheiro, adicione o seguinte código sob oprovision
para criar a aplicação 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
Observação
Substitua o valor de "name" pelo nome da aplicação Microsoft Entra esperado.
Adicione as seguintes linhas
provision
em para configurar a aplicação Microsoft Entra com o modelo da aplicação Microsoft Entra no passo 1.- uses: aadApp/update with: manifestPath: "YOUR_PATH_TO_AAD_APP_MANIFEST" outputFilePath : ./build/aad.manifest.${{TEAMSFX_ENV}}.json
Observação
Substitua o valor de
manifestPath
pelo caminho relativo do manifesto da aplicação Microsoft Entra indicado no passo 1. Por exemplo:./aad.manifest.json
teamsapp.local.yml
No ficheiro:Adicione o seguinte código
provision
em para adicionar configurações relacionadas com o Microsoft Entra ao serviço de depuração 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}}
Atualização As configurações relacionadas com a Infraestrutura do Microsoft Entra têm de ser configuradas no seu serviço remoto. O exemplo seguinte mostra as configurações na Aplicação Web do Azure.
- TeamsFx__Authentication__ClientId: ID de cliente da aplicação Microsoft Entra.
- TeamsFx__Authentication__ClientSecret: segredo do cliente da aplicação Microsoft Entra.
- TeamsFx__Authentication__OAuthAuthority: Autoridade de autenticação da aplicação Microsoft Entra.
Exemplo de modelo de Separador TeamsFx.
Abra
infra/azure.parameters.json
e adicione as seguintes linhas emparameters
:"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 o
infra/azure.bicep
ficheiro e localize o código:param location string = resourceGroup().location
Atualize o código como:
param tabAadAppClientId string param tabAadAppOauthAuthorityHost string param tabAadAppTenantId string @secure() param tabAadAppClientSecret string
infra/azure.bicep
No ficheiro, localize o 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' } } }
Atualize o 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) } }
A atualização
appsettings.json
eappsettings.Development.json
os ficheiros das configurações relacionadas com o Microsoft Entra têm de ser configurados para as definições do projeto .NET:TeamsFx: { Authentication: { ClientId: AAD app client id ClientSecret: AAD app client secret, InitiateLoginEndpoint: Login Endpoint, OAuthAuthority: AAD app oauth authority } }
Observação
Pode utilizar
$ENV_NAME$
para referenciar envs no serviço local/remoto.Exemplo de modelo de Separador TeamsFx.
Abra
appsettings.json
ficheiros eappsettings.Development.json
atualize o código:"TeamsFx": { "Authentication": { "ClientId": "$clientId$", "ClientSecret": "$client-secret$", "InitiateLoginEndpoint": "$TAB_ENDPOINT$/auth-start.html", "OAuthAuthority": "$oauthAuthority$" } }
O seu ambiente está pronto e pode atualizar o seu código para adicionar o SSO à sua aplicação Teams. Pode encontrar exemplos:
- SDK do TeamsFx: https://www.nuget.org/packages/Microsoft.TeamsFx/
- Código de Exemplo: em
TeamsFx-Auth/Tab
Exemplo de modelo de Separador TeamsFx.
Crie
Config.cs
e atualize o 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; } } }
Observação
Tem de substituir
{{YOUR_NAMESPACE}}
pelo nome do espaço de nomes.Mova o
TeamsFx-Auth/Tab/GetUserProfile.razor
ficheiro paraComponents/
.Adicione o
GetUserProfile
componente à sua página do Razor, por exemplo:<h1>Hello, World</h1> <GetUserProfile />
Abra o
Program.cs
ficheiro e localize o código:builder.Services.AddScoped<MicrosoftTeams>();
e atualize o código como:
var config = builder.Configuration.Get<ConfigOptions>(); builder.Services.AddTeamsFx(config.TeamsFx.Authentication); ```
Observação
Tem de excluir o código de exemplo no
TeamsFx-Auth
ficheiro para evitar falhas de criação ao adicionar o seguinte código ao.csproj
ficheiro:<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 verificar se a aplicação SSO funciona conforme esperado, execute o
Local Debug
no Visual Studio.Também pode executar a aplicação na cloud ao selecionar e
Provision in the cloud
, em seguida,Deploy to the cloud
.
Aplicação de bot do Teams
Atualize o manifesto da aplicação Microsoft Entra no
TeamsFx-Auth/aad.manifest.template.json
ficheiro.Pode copiar o ficheiro para qualquer pasta do seu projeto, mudar o nome como ficheiro
aad.manifest.json
e anotar o caminho para este ficheiro para referência posterior. Faça as seguintes atualizações no modelo para criar ou atualizar uma aplicação Microsoft Entra para SSO.-
identifierUris
: utilizado para identificar e aceder exclusivamente ao recurso. Tem de definir os URIs de Redirecionamento corretos para "identifierUris" para identificar esta aplicação com êxito. Para obter mais informações, veja o atributo identifierUris.
Exemplo para o Modelo de Bot do TeamsFx:
"identifierUris":[ "api://botid-${{BOT_ID}}" ]
Observação
Pode utilizar
${{ENV_NAME}}
para referenciar variáveis noenv/.env.{TEAMSFX_ENV}
ficheiro.-
replyUrlsWithType
: lista os valores de redirect_uri registados que o ID do Microsoft Entra aceita como destinos ao devolver tokens. Tem de definir os URIs de Redirecionamento necessários para "replyUrlsWithType" para devolver o token com êxito. Para obter mais informações, veja o atributo replyUrlsWithType.
Exemplo:
"replyUrlsWithType":[ { "url": "https://${{BOT_DOMAIN}}/bot-auth-end.html", "type": "Web" } ]
Observação
Pode utilizar
${{ENV_NAME}}
para referenciar envs noenv/.env.{TEAMSFX_ENV}
ficheiro.Exemplo:
"replyUrlsWithType":[ { "url": "https://${{BOT_DOMAIN}}/bot-auth-end.html", "type": "Web" } ]
- "name": substitua o valor pelo nome da aplicação Microsoft Entra esperado.
-
Atualize o manifesto da aplicação.
- É
WebApplicationInfo
necessário adicionar um objeto ao manifesto da aplicação para ativar o SSO na aplicação Teams. Para obter mais informações, consulte webApplicationInfo.
Por exemplo: abra o modelo de manifesto da aplicação e acrescente o seguinte objeto no manifesto da aplicação:
"webApplicationInfo": { "id": "${{AAD_APP_CLIENT_ID}}", "resource": "SAME_AS_YOUR_IDENTIFIERURIS" }
Observação
Tem de atualizar o valor do recurso para o
identifierUris
configurado no passo 1.i e utilizar${{ENV_NAME}}
para referenciar envs noenv/.env.{TEAMSFX_ENV}
.Exemplo para o modelo bot do TeamsFx:
Abra o
appPackage/manifest.json
ficheiro e adicione a seguinte propriedade no ficheiro de manifesto da aplicação:"webApplicationInfo": { "id": "${{AAD_APP_CLIENT_ID}}", "resource": "api://botid-${{BOT_ID}}" }
- Pode registar o comando
commands
em nocommandLists
bot:
{ "title": "YOUR_COMMAND_TITLE", "description": "YOUR_COMMAND_DESCRIPTION" }
Exemplo para o modelo bot do TeamsFx:
{ "title": "show", "description": "Show user profile using Single Sign On feature" }
Lembre-se de eliminar o comando "helloWorld" anterior, uma vez que não é utilizado.
- Adicione também o domínio do bot a
validDomain
:
"validDomains": [ "${{BOT_DOMAIN}}" ]
- É
Atualização
teamsapp.yml
eteamsapp.local.yml
ficheiros: as alterações e configurações relacionadas com o Microsoft Entra têm de ser adicionadas aos seusyml
ficheiros:Adicione
aadApp/create
emprovision
para criar novas aplicações Microsoft Entra utilizadas para SSO. Para obter mais informações, veja as ações disponíveis no Teams Toolkit.Adicione
aadApp/update
emprovision
para atualizar a sua aplicação Microsoft Entra com o manifesto da aplicação Microsoft Entra no passo 1. Para obter mais informações, veja aadApp/update.Atualize
file/createOrUpdateJson
o Ficheiro para adicionar as seguintes variáveis de ambiente durante a depuração local:- ClientId: ID de cliente da aplicação Microsoft Entra.
- ClientSecret: segredo do cliente da aplicação Microsoft Entra.
- OAuthAuthority: Autoridade de oauth da aplicação Microsoft Entra. Para obter mais informações, veja file/updateJson.
Exemplo de modelo de Bot do TeamsFx
Em ficheiros
teamsapp.yml
eteamsapp.local.yml
:- Adicione o código em
provision
para criar a aplicação 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
Observação
Substitua o valor de "name" pelo nome da aplicação Microsoft Entra esperado.
Adicione o código em
provision
para configurar a aplicação Microsoft Entra com o modelo da aplicação Microsoft Entra no passo 1.- uses: aadApp/update with: manifestPath: "./aad.manifest.json" outputFilePath : ./build/aad.manifest.${{TEAMSFX_ENV}}.json
Observação
Substitua o valor de "manifestPath" pelo caminho relativo do manifesto da aplicação Microsoft Entra indicado no passo 1. Por exemplo, "./aad.manifest.json"
teamsapp.local.yml
No ficheiro:provision
Atualizefile/createOrUpdateJsonFile
em para adicionar configurações relacionadas com o Microsoft Entra ao serviço de depuração 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
Atualize as configurações relacionadas com o Infra Microsoft Entra para configurar o serviço remoto. O exemplo seguinte mostra as configurações na Aplicação Web do Azure.
- TeamsFx__Authentication__ClientId: ID de cliente da aplicação Microsoft Entra.
- TeamsFx__Authentication__ClientSecret: segredo do cliente da aplicação Microsoft Entra.
- TeamsFx__Authentication__OAuthAuthority: Autoridade de autenticação da aplicação Microsoft Entra.
- TeamsFx__Authentication__Bot__InitiateLoginEndpoint: página inicial de autenticação para Bot.
- TeamsFx__Authentication__ApplicationIdUri: a aplicação Microsoft Entra identifica OS URIs.
Exemplo para o modelo bot do TeamsFx:
Abra o
infra/azure.parameters.json
ficheiro, adicione o 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 o
infra/azure.bicep
ficheiro e localize o código:param location string = resourceGroup().location
Atualize o código como:
param m365ClientId string param m365TenantId string param m365OauthAuthorityHost string param m365ApplicationIdUri string = 'api://botid-${botAadAppClientId}' @secure() param m365ClientSecret string
Adicione o código antes da saída:
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' } }
Observação
Se quiser adicionar configurações adicionais à aplicação Web do Azure, adicione as configurações na webAppSettings.
Atualize o
appsettings.json
ficheiro e oappsettings.Development.json
ficheiro para configurações relacionadas com o Microsoft Entra que têm de ser configuradas para as definições do projeto .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 } } }
Observação
Pode utilizar para referenciar
$ENV_NAME$
envs no serviço local/remoto.Exemplo para o modelo bot do TeamsFx:
Abra
appsettings.json
ficheiros eappsettings.Development.json
adicione o código:"TeamsFx": { "Authentication": { "ClientId": "$clientId$", "ClientSecret": "$client-secret$", "OAuthAuthority": "$oauthAuthority$", "ApplicationIdUri": "$applicationIdUri$", "Bot": { "InitiateLoginEndpoint": "$initiateLoginEndpoint$" } } }
Atualize o código para adicionar o SSO à sua aplicação Teams.
Pode encontrar o código de exemplos:
- SDK do TeamsFx: https://www.nuget.org/packages/Microsoft.TeamsFx/
- Código de Exemplo: em
TeamsFx-Auth/Bot
Exemplo para o modelo bot do TeamsFx:
- Abra
Config.cs
e substitua o 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; } } }
Observação
Substitua a
{{YOUR_NAMESPACE}}
propriedade pelo nome do espaço de nomes.Mover
TeamsFx-Auth/Bot/SSO
eTeamsFx-Auth/Bot/Pages
ficheiros para/
.Observação
Lembre-se de substituir
{{YOUR_NAMESPACE}}
pelo espaço de nomes do projeto.Abra o
Program.cs
ficheiro e localize o código:
builder.Services.AddSingleton<BotFrameworkAuthentication, ConfigurationBotFrameworkAuthentication>();
Atualize o 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; });
Localize o 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); });
Atualize o 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); });
Localize e elimine o código:
// Create the bot as a transient. In this case the ASP Controller is expecting an IBot. builder.Services.AddTransient<IBot, TeamsBot>();
Localize o código:
app.UseEndpoints(endpoints => { endpoints.MapControllers(); });
Atualize o código como:
app.UseEndpoints(endpoints => { endpoints.MapControllers(); endpoints.MapRazorPages(); });
Observação
Tem de excluir o código de exemplo
TeamsFx-Auth
em para evitar falhas de criação ao adicionar o seguinte código ao.csproj
ficheiro:<ItemGroup> <Compile Remove="TeamsFx-Auth/**/*" /> <None Include="TeamsFx-Auth/**/*" /> <Content Remove="TeamsFx-Auth/Tab/GetUserProfile.razor"/> </ItemGroup>
Para verificar se a aplicação SSO funciona conforme esperado, execute o
Local Debug
no Visual Studio.Também pode executar a aplicação na cloud ao selecionar
Provision in the cloud
e, em seguida, selecionarDeploy to the cloud
para atualizar a sua aplicação.