Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O CORS (compartilhamento de recursos entre origens) pode apresentar desafios para os aplicativos e APIs que você publica por meio do proxy de aplicativo do Microsoft Entra. Esse artigo discute problemas e soluções de CORS do proxy de aplicativo do Microsoft Entra.
A segurança do navegador geralmente impede uma página da Web de fazer solicitações para outro domínio. Essa restrição é chamada de política de mesma origem. A política impede que um site mal-intencionado leia dados confidenciais de outro site. No entanto, às vezes, talvez seja interessante permitir que outros sites chamem sua API Web. CORS é um padrão W3C que direciona um servidor para permitir algumas solicitações entre origens e rejeitar outras.
Identificar um problema de CORS
Duas URLs terão a mesma origem se tiverem esquemas, hosts e portas idênticos (RFC (Solicitação de Comentários) 6454), como neste exemplo:
http://contoso.com/foo.htmlhttp://contoso.com/bar.html
Essas URLs têm origens diferentes das duas anteriores:
http://contoso.net: domínio diferentehttp://contoso.com:9000/foo.html: porta diferentehttps://contoso.com/foo.html: esquema diferentehttp://www.contoso.com/foo.html: subdomínio diferente
A política de mesma origem impede que os aplicativos acessem recursos de outras origens, a menos que usem os cabeçalhos de controle de acesso corretos. Se os cabeçalhos de CORS estiverem ausentes ou incorretos, as solicitações entre origens falharão.
Você pode identificar problemas de CORS usando as ferramentas de depuração do navegador:
- Abra o navegador e vá para o aplicativo Web.
- Selecione a chave F12 para abrir o console de depuração no DevTools.
- Tente reproduzir a transação e examine a mensagem do console. Uma violação de CORS produz um erro de console sobre a origem.
Na captura de tela a seguir, selecionar o botão Experimentar causou uma mensagem de erro CORS porque https://corswebclient-contoso.msappproxy.net não foi encontrado no cabeçalho Access-Control-Allow-Origin.

Desafios do CORS com o proxy de aplicativo
O exemplo a seguir mostra um cenário típico de CORS do proxy de aplicativo do Microsoft Entra. O servidor interno hospeda um controlador da API Web CORSWebService e um CORSWebClient que chama CORSWebService. Uma solicitação de JavaScript e XML (AJAX) assíncrona é feita de CORSWebClient para CORSWebService.

O aplicativo CORSWebClient funciona localmente, mas falha ou mostra um erro quando publicado por meio do proxy de aplicativo do Microsoft Entra. Se CORSWebClient e CORSWebService forem publicados como aplicativos separados, eles serão hospedados em domínios diferentes. Os diferentes domínios fazem solicitações AJAX de CORSWebClient para CORSWebService entre origens, fazendo com que elas falhem.

Soluções para problemas de CORS em proxies de aplicativos
Você pode resolver o problema anterior do CORS de várias maneiras.
Opção 1: configurar um domínio personalizado
Use um proxy de aplicativo do Microsoft Entra domínio personalizado para publicar da mesma origem, sem fazer alterações nas origens, códigos ou cabeçalhos dos aplicativos.
Opção 2: publicar o diretório pai
Publique o diretório pai de ambos os aplicativos. Essa solução funcionará especialmente bem se você tiver apenas dois aplicativos no servidor Web. Em vez de publicar cada aplicativo separadamente, você pode publicar o diretório pai comum, o que resulta na mesma origem.
Os exemplos a seguir mostram as páginas de proxy de aplicação do Microsoft Entra para o app CORSWebClient. Quando a URL interna é definida como contoso.com/CORSWebClient, o aplicativo não pode fazer solicitações bem-sucedidas para o contoso.com/CORSWebService diretório, porque elas são de origem cruzada.

Em vez disso, defina o valor da URL Interna para publicar o diretório pai, que inclui tanto os diretórios CORSWebClient quanto CORSWebService.

As URLs do aplicativo resultantes resolvem efetivamente o problema de CORS:
https://corswebclient-contoso.msappproxy.net/CORSWebServicehttps://corswebclient-contoso.msappproxy.net/CORSWebClient
Opção 3: atualizar cabeçalhos HTTP
Para corresponder à solicitação de origem, adicione um cabeçalho de resposta HTTP personalizado no serviço Web. Sites em execução no IIS (Serviços de Informações da Internet) usam o Gerenciador do IIS para modificar o cabeçalho.

A modificação não requer nenhuma alteração de código. Você pode verificá-lo em um rastreamento do Fiddler.
**Post the Header Addition**\
HTTP/1.1 200 OK\
Cache-Control: no-cache\
Pragma: no-cache\
Content-Type: text/plain; charset=utf-8\
Expires: -1\
Vary: Accept-Encoding\
Server: Microsoft-IIS/8.5 Microsoft-HTTPAPI/2.0\
**Access-Control-Allow-Origin: https://corswebclient-contoso.msappproxy.net**\
X-AspNet-Version: 4.0.30319\
X-Powered-By: ASP.NET\
Content-Length: 17
Opção 4: Modificar o aplicativo
Você pode alterar seu aplicativo para dar suporte ao CORS adicionando o Access-Control-Allow-Origin cabeçalho, com valores apropriados. A maneira de adicionar o cabeçalho depende da linguagem de código do aplicativo. Alterar o código requer mais esforço.
Opção 5: estender o tempo de vida do token de acesso
Alguns problemas de CORS não podem ser resolvidos. Por exemplo, seu aplicativo redireciona para login.microsoftonline.com para autenticar, e o token de acesso expira. A chamada CORS falhará. Uma solução alternativa para esse cenário é estender o tempo de vida do token de acesso para impedir que ele expire durante a sessão de um usuário. Para obter mais informações, consulte Tempos de vida de token configuráveis no Microsoft Entra ID.
Opção 6: aplicativo complexo
Para aplicativos que contêm diversos aplicativos web individuais em que solicitações de preflight (OPTIONS) são usadas, você pode publicar os apps através da funcionalidade de aplicativo complexo. Para obter mais informações, consulte Noções básicas sobre aplicativos complexos no proxy de aplicativo do Microsoft Entra.