O Copilot Studio suporta logon único (SSO). O SSO permite que os agentes em seu site entrem com clientes se eles já estiverem conectados à página ou ao aplicativo em que o agente está implantado.
Por exemplo, o agente está hospedado na intranet corporativa ou em um aplicativo ao 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.
Definir 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 tem o canal do Teams habilitado, será necessário seguir as instruções de configuração na documentação Configurar logon único com o Microsoft Entra ID para agentes no Microsoft Teams. 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.
Localizar a URL do ponto de extremidade do token do agente
No Copilot Studio, abra seu agente e, em seguida, selecione 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 guia com seu agente e cole o código de validação na conversa do 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 entrada e solicita um token OBO (em nome de) 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 variável AuthToken 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 "tela" para ajudar a diferenciá-lo do registro do aplicativo para autenticação.
Por exemplo, se o nome do seu agente for "Ajuda de vendas da Contoso", você poderá 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 precisem consentir com cada aplicativo, alguém atribuído pelo menos ao cargo de Administrador de Aplicativos ou Administrador de Aplicativos de Nuvem pode conceder consentimento para todo o locatário aos registros do seu aplicativo.
Definir 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.
Acesse Permissões da API e verifique se as permissões corretas foram adicionadas ao 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 precisem consentir com cada aplicativo, alguém atribuído pelo menos ao cargo de Administrador de Aplicativos ou Administrador de Aplicativos de Nuvem pode 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 se você selecionou o agente para o qual deseja habilitar a autenticação, selecionando o ícone do 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 folha Expor uma API para o registro do aplicativo de autenticação do agente no campo URL de troca de token. A URI do canal está no formato de api://1234-4567/scope.name.
Selecione Salvar e publique o conteúdo do agente.
Configurar seu código HTML de tela personalizada para habilitar o SSO
Atualize a página de tela personalizada em que o agente está localizado para interceptar a solicitação do cartão de logon 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>. No do método main, esse 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 guia Canais do agente que você está usando, e selecionando Aplicativo móvel no portal do Copilot Studio.
<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.