O Copilot Studio suporta logon único (SSO). O SSO permite que agentes em seu site registrem clientes caso eles já estejam logados na página ou aplicativo onde o agente está implantado.
Por exemplo, o agente é hospedado na intranet corporativa ou em um aplicativo no qual o usuário já está conectado.
Há quatro etapas principais para configurar o SSO para o Copilot Studio:
Criar um registro de aplicativo no Microsoft Entra ID para sua tela personalizada.
Defina um escopo personalizado para seu agente.
Configurar autenticação no Copilot Studio para habilitar SSO.
Configurar seu código HTML de tela personalizada para habilitar SSO.
1 Se você também tiver o canal Teams habilitado, precisará seguir as instruções de configuração em Configurar logon único com Microsoft Entra ID para agentes na Microsoft Teams documentação. A falha ao definir as configurações de SSO do Teams conforme instruído nesta página fará com que seus usuários sempre falhem na autenticação ao usar o canal do Teams.
Siga as instruções para criar um registro de aplicativo de autenticação novamente para criar um segundo registro de aplicativo, que serve como seu registro de aplicativo de tela.
Adicione a ID de registro do aplicativo de tela ao registro do aplicativo de autenticação.
Adicionar URL de troca de token
Para atualizar as configurações de autenticação do Microsoft Entra ID no Copilot Studio, você precisa adicionar a URL de troca de token para permitir que seu aplicativo e o Copilot Studio compartilhem informações.
No portal do Azure na folha de registro do aplicativo de autenticação, vá para Expor uma API.
Em Escopos, selecione o ícone Copiar para a área de transferência.
No Copilot Studio, no menu de navegação em Configurações, selecione Segurança e selecione o bloco Autenticação.
Para URL de troca de token (necessário para SSO), cole o escopo copiado anteriormente.
Selecione Salvar.
Configurar o registro do aplicativo de tela
Após criar seu registro de aplicativo de tela, acesse Autenticação e selecione Adicionar uma plataforma.
Em Configurações da plataforma, selecione Adicionar uma plataforma e Web.
Em Redirecionar URIs, insira a URL da sua página da Web, por exemplo, http://contoso.com/index.html.
Na seção Concessão implícita e fluxos híbridos, ative as opções Tokens de acesso (usados para fluxos implícitos) e Tokens de ID (usados para fluxos implícitos e híbridos).
Selecione Configurar.
Encontre o URL do ponto final do token do seu agente
Em Copilot Studio, abra seu agente e depois Select Canais.
Selecione Aplicativo móvel.
Em Ponto de extremidade do token, selecione Copiar.
Configure o SSO em sua página da Web
Use o código fornecido no Repositório do GitHub do Copilot Studio para criar uma página da Web para o URL de redirecionamento. Copie o código do repositório do GitHub e modifique-o usando as instruções a seguir.
Observação
O código no repositório do GitHub requer que o usuário selecione um botão de logon ou faça logon de um site diferente. Para habilitar o logon automático, adicione o seguinte código ao início de aysnc function main():
(async function main() {
if (clientApplication.getAccount() == null) {
await clientApplication.loginPopup(requestObj).then(onSignin).catch(function (error) {console.log(error) });
}
// Add your BOT ID below
var theURL =
Acesse a página Visão geral no portal do Azure e copie o ID do aplicativo (cliente) e o ID do diretório (locatário) a partir do registro do seu aplicativo de tela.
Para configurar o Microsoft Authentication Library (MSAL):
Atribua clientId para a sua ID do aplicativo (cliente).
Atribua authority para https://login.microsoftonline.com/ e adicione a sua ID do diretório (locatário) até o fim.
Por exemplo:
var clientApplication;
(function (){
var msalConfig = {
auth: {
clientId: '00001111-aaaa-2222-bbbb-3333cccc4444',
authority: 'https://login.microsoftonline.com/7ef988bf-xxxx-51af-01ab-2d7fd011db47'
},
Defina a variável theURL para o URL do ponto de extremidade do token que você copiou anteriormente. Por exemplo:
(async function main() {
var theURL = "https://<token endpoint URL>"
Edite o valor de userId para incluir um prefixo personalizado. Por exemplo:
Se o seu navegador bloquear pop-ups ou se você estiver usando uma janela de navegação anônima ou privada, você precisará fazer login. Caso contrário, o logon é concluído usando um código de validação.
Uma nova guia do navegador é aberta.
Alterne para a nova guia e copie o código de validação.
Volte para a aba com seu agente e cole o código de validação na conversa agente.
O Copilot Studio envia uma solicitação de logon para permitir que o usuário entre com seu provedor de identidade configurado.
A tela personalizada do agente intercepta o prompt de login e solicita um token em nome de (OBO) do Microsoft Entra ID. A tela envia o token para o agente.
Ao receber o token OBO, o agente troca o token OBO por um "token de acesso" e preenche a AuthToken variável usando o valor do token de acesso. A variável IsLoggedIn também é definida nesse momento.
Criar um registro de aplicativo no Microsoft Entra ID para sua tela personalizada
Para habilitar o SSO, você precisará de dois registros de aplicativo separados:
Acesse Registros de aplicativo selecionando o ícone ou pesquisando na barra de pesquisa superior.
Selecione Novo registro.
Insira um nome para o registro. Pode ser útil usar o nome do agente cuja tela você está registrando e incluir "canvas" para ajudar a separá-lo do registro do aplicativo para autenticação.
Por exemplo, se o seu agente for chamado de "Contoso ajuda de vendas", você pode nomear o registro do aplicativo como "ContosoSalesCanvas" ou algo semelhante.
Em Tipos de conta com suporte, selecione Contas em qualquer locatário organizacional (Qualquer diretório do Microsoft Entra ID - Multilocatário) e contas pessoais da Microsoft (por exemplo, Skype, Xbox).
Deixe a seção URI de Redirecionamento em branco por enquanto, pois você inserirá essas informações nas próximas etapas. Selecione Registrar.
Após a conclusão do registro, ele abre na página Visão geral. Acesse Manifesto. Confirme se accessTokenAcceptedVersion está definido como 2. Se não estiver, altere para 2 e selecione Salvar.
Adicionar a URL de redirecionamento
Com o registro aberto, acesse Autenticação e selecione Adicionar uma plataforma.
Na folha Configurar plataformas, selecione Web.
Em URIs de Redirecionamento, adicione a URL completa à página em que sua tela de conversa está hospedada. Na seção Concessão implícita, marque as caixas de seleção Tokens de Identificação e Tokens de Acesso.
Selecione Configurar para confirmar as alterações.
Acesse Permissões da API. Selecione Conceder consentimento de administração para <seu nome de locatário> e, em seguida, Sim.
Importante
Para evitar que os usuários tenham que dar consentimento em cada aplicativo, um Administrador global, um Administrador de aplicativos ou um Administrador de aplicativos de nuvem deve conceder consentimento para todo o locatário aos registros do seu aplicativo.
Defina um escopo personalizado para seu agente
Defina um escopo personalizado expondo uma API para o registro do aplicativo de tela dentro do registro do aplicativo de autenticação. Escopos permitem determinar funções de usuário e administrador, além de direitos de acesso.
Essa etapa cria uma relação de confiança entre o registro do aplicativo de autenticação a ser autenticado e o registro do aplicativo para a tela personalizada.
Vá para Permissões da API e certifique-se de que as permissões corretas foram adicionadas para seu agente. Selecione Conceder consentimento de administração para <seu nome de locatário> e, em seguida, Sim.
Importante
Para evitar que os usuários tenham que dar consentimento em cada aplicativo, um Administrador global, um Administrador de aplicativos ou um Administrador de aplicativos de nuvem deve conceder consentimento para todo o locatário aos registros do seu aplicativo.
Acesse Expor uma API e selecione Adicionar um escopo.
Insira um nome para o escopo, junto com as informações de exibição que devem ser mostradas aos usuários quando eles acessam a tela de SSO. Selecione Adicionar escopo.
Selecione Adicionar um aplicativo cliente.
Insira o ID do aplicativo (cliente) da página Visão geral para o registro do aplicativo de tela no campo ID do cliente. Marque a caixa de seleção do escopo listado que você criou.
Selecione Adicionar aplicativo.
Configurar autenticação mo Copilot Studio para habilitar o SSO
A URL de troca de tokens na página de configuração de autenticação do Copilot Studio é usada para trocar o token OBO pelo token de acesso solicitado por meio da estrutura do bot.
O Copilot Studio chama o Microsoft Entra ID para executar a troca real.
Entre no Copilot Studio.
Confirme que você selecionou o agente para o qual deseja habilitar a autenticação selecionando o ícone agente no menu superior e escolhendo o agente correto.
No menu de navegação, em Configurações, selecione Segurança. Em seguida, selecione o cartão Autenticação.
Insira o URI de escopo completo da lâmina Expor uma API para o registro do aplicativo de autenticação agente no campo URL de troca de token . A URI do canal está no formato de api://1234-4567/scope.name.
Select Salve e depois publique o conteúdo agente.
Configurar seu código HTML de tela personalizada para habilitar o SSO
Atualize a página de tela personalizada onde o agente está localizado para interceptar a solicitação de login cartão e trocar o token OBO.
Configure a Microsoft Authentication Library (MSAL) adicionando o código a seguir em um rótulo de <script> na sua seção <head>.
Atualize o clientId com o ID do aplicativo (cliente) para o registro do aplicativo de tela. Substitua <Directory ID> pelo ID do diretório (locatário). Você obtém esses IDs na página Visão geral do registro do aplicativo de tela.
<head>
<script>
var clientApplication;
(function () {
var msalConfig = {
auth: {
clientId: '<Client ID [CanvasClientId]>',
authority: 'https://login.microsoftonline.com/<Directory ID>'
},
cache: {
cacheLocation: 'localStorage',
storeAuthStateInCookie: false
}
};
if (!clientApplication) {
clientApplication = new Msal.UserAgentApplication(msalConfig);
}
} ());
</script>
</head>
Insira o seguinte <script> na seção <body>. Esse script chama um método para recuperar o resourceUrl e trocar seu token atual por um token solicitado pelo prompt do OAuth.
<script>
function getOAuthCardResourceUri(activity) {
if (activity &&
activity.attachments &&
activity.attachments[0] &&
activity.attachments[0].contentType === 'application/vnd.microsoft.card.oauth' &&
activity.attachments[0].content.tokenExchangeResource) {
// asking for token exchange with Microsoft Entra ID
return activity.attachments[0].content.tokenExchangeResource.uri;
}
}
function exchangeTokenAsync(resourceUri) {
let user = clientApplication.getAccount();
if (user) {
let requestObj = {
scopes: [resourceUri]
};
return clientApplication.acquireTokenSilent(requestObj)
.then(function (tokenResponse) {
return tokenResponse.accessToken;
})
.catch(function (error) {
console.log(error);
});
}
else {
return Promise.resolve(null);
}
}
</script>
Insira o seguinte <script> na seção <body>. Dentro do método main , este código adiciona uma condicional ao seu store, com o identificador exclusivo do seu agente. Ele também gera um ID exclusivo como sia variável de userId.
Atualize <COPILOT ID> com o ID do seu agente. Você pode ver o ID do seu agente acessando a aba Canais do agente que você está usando e selecionando Aplicativo móvel no Copilot Studio portal.
<script>
(async function main() {
// Add your AGENT ID below
var BOT_ID = "<BOT ID>";
var theURL = "https://powerva.microsoft.com/api/botmanagement/v1/directline/directlinetoken?botId=" + BOT_ID;
const {
token
} = await fetchJSON(theURL);
var directline = await fetchJSON(regionalChannelSettingsURL).then(res=> res.channelUrlsById.directline);
const directLine = window.WebChat.createDirectLine({
domain: `${directline}v3/directline`,
token
});
var userID = clientApplication.account?.accountIdentifier != null ?
("Your-customized-prefix-max-20-characters" + clientApplication.account.accountIdentifier).substr(0, 64) :
(Math.random().toString() + Date.now().toString()).substr(0, 64); // Make sure this will not exceed 64 characters
const store = WebChat.createStore({}, ({
dispatch
}) => next => action => {
const {
type
} = action;
if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
dispatch({
type: 'WEB_CHAT/SEND_EVENT',
payload: {
name: 'startConversation',
type: 'event',
value: {
text: "hello"
}
}
});
return next(action);
}
if (action.type === 'DIRECT_LINE/INCOMING_ACTIVITY') {
const activity = action.payload.activity;
let resourceUri;
if (activity.from && activity.from.role === 'bot' &&
(resourceUri = getOAuthCardResourceUri(activity))) {
exchangeTokenAsync(resourceUri).then(function(token) {
if (token) {
directLine.postActivity({
type: 'invoke',
name: 'signin/tokenExchange',
value: {
id: activity.attachments[0].content.tokenExchangeResource.id,
connectionName: activity.attachments[0].content.connectionName,
token,
},
"from": {
id: userID,
name: clientApplication.account.name,
role: "user"
}
}).subscribe(
id => {
if (id === 'retry') {
// The agent was not able to handle the invoke, so display the oauthCard
return next(action);
}
// else: tokenexchange successful and we do not display the oauthCard
},
error => {
// an error occurred to display the oauthCard
return next(action);
}
);
return;
} else
return next(action);
});
} else
return next(action);
} else
return next(action);
});
const styleOptions = {
// Add styleOptions to customize Web Chat canvas
hideUploadButton: true
};
window.WebChat.renderWebChat({
directLine: directLine,
store,
userID: userID,
styleOptions
},
document.getElementById('webchat')
);
})().catch(err => console.error("An error occurred: " + err));
</script>
Exemplo de código completo
Para obter mais informações, você pode encontrar o exemplo de código completo, com os scripts condicionais da loja e MSAL já inclusos no nosso repositório GitHub.