Compartilhar via


Solução de problemas de suplementos de alto nível de confiança do SharePoint

Usar a ferramenta Fiddler

A ferramenta gratuita Fiddler pode ser usada para capturar as solicitações HTTP enviadas pelo componente remoto do seu suplemento para o SharePoint.

Há uma extensão gratuita para a ferramenta que decodifica automaticamente os tokens de acesso nas solicitações.

Depois de instalar o Fiddler no servidor de aplicativos Web, adicione a marcação a seguir ao arquivo web.config para fazer solicitações de seu aplicativo Web remoto passar por esse proxy. Dessa forma, você pode capturar um rastreamento do Fiddler e ver a resposta completa do SharePoint quando receber um erro.

Observação

Verifique se você removerá essa marcação se não estiver executando o Fiddler. Se você não remover a marcação, seu suplemento não poderá fazer solicitações HTTP.

<system.net>
  <defaultProxy>
    <proxy usesystemdefault="False" bypassonlocal="False" proxyaddress="http://127.0.0.1:8888" />
  </defaultProxy>
</system.net>

Depois de instalar o Fiddler, você também pode verificar os cabeçalhos de resposta do SharePoint, que incluem um GUID de solicitação. Este GUID de solicitação é uma ID de correlação que você pode pesquisar nos logs para encontrar quaisquer erros de log associados a essa solicitação.

401 Erro não autorizado

Várias coisas podem causar um erro não autorizado 401 quando o suplemento de alta confiança acessa o SharePoint. Se você estiver usando o CSOM (modelo de objeto do lado do cliente), o erro será semelhante ao seguinte:

[WebException: The remote server returned an error: (401) Unauthorized.]
   System.Net.HttpWebRequest.GetResponse() +8515936
   Microsoft.SharePoint.Client.SPWebRequestExecutor.Execute() +178
   Microsoft.SharePoint.Client.ClientRequest.ExecuteQueryToServer(ChunkStringBuilder sb) +1427
   Microsoft.SharePoint.Client.ClientRequest.ExecuteQuery() +270
   Microsoft.SharePoint.Client.ClientRuntimeContext.ExecuteQuery() +146
   Microsoft.SharePoint.Client.ClientContext.ExecuteQuery() +666
   S2STestWeb.Default.Page_Load(Object sender, EventArgs e) in c:\MyFiles\HightrustTest\HightrustTestWeb\Default.aspx.cs:28
   System.Web.UI.Control.LoadRecursive() +71
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3178

Se você estiver usando o arquivo TokenHelper e a identidade do Windows, o código que dispara a exceção será semelhante ao seguinte:

ClientContext clientContext = 
    TokenHelper.GetS2SClientContextWithWindowsIdentity(sharepointUrl, Request.LogonUserIdentity); 
clientContext.Load(clientContext.Web);
clientContext.ExecuteQuery();

Sua primeira etapa na solução de problemas do problema é usar o depurador do Visual Studio para verificar se o token de acesso e o objeto ClientContext foram construídos com êxito. Se estiverem, investigue as seguintes possibilidades:

Possível problema e resolução:

  • Não há nenhum perfil de usuário criado para o usuário que está acessando o aplicativo Web remoto. Crie o perfil do usuário.

  • Seu suplemento não tem permissão para o recurso que você está tentando acessar. Abra o Shell de Gerenciamento do SharePoint e execute o cmdlet Windows PowerShell a seguir. A variável $web é o site do SharePoint ao qual você está tentando obter acesso e $appPrincipal é a ID do suplemento. Para obter mais informações, consulte Set-SPAppPrincipalPermission.

      Set-SPAppPrincipalPermission -Site $web -AppPrincipal $appPrincipal -Scope Site -Right FullControl
    
  • Seu aplicativo Web está aceitando solicitações anônimas. Isso significa que não há uma identidade de usuário real no token de acesso. Verifique se o acesso anônimo foi desabilitado no IIS para o diretório raiz do seu aplicativo Web remoto. Você também pode verificar isso depurando seu aplicativo Web remoto e verificando o valor de Request.LogonUserIdentity no arquivo default.aspx.cs (ou .vb) para garantir que ele não seja um usuário anônimo.

  • Seu certificado digital não foi adicionado ao repositório de certificados confiável. Verifique se você seguiu os procedimentos em Pacote e publique suplementos do SharePoint de alta confiança.

Uma incompatibilidade de nomes de domínio em arquivos de configuração e formulários de registro pode impedir a autorização. Os quatro valores a seguir devem ser exatamente os mesmos:

  • O Domínio de Suplemento especificado quando o Suplemento do SharePoint é registrado em AppRegNew.aspx.

  • O domínio sob o qual o certificado de segurança do aplicativo Web remoto é registrado.

  • A parte de domínio do valor StartPage no arquivo AppManifest.xml.

  • A parte de domínio das URLs de qualquer receptor de evento especificado no AppManifest.xml.

Em relação a esse ponto, observe o seguinte:

  • Se o componente remoto do seu suplemento do SharePoint estiver usando qualquer porta diferente da 443, você deverá incluir explicitamente a porta como parte do domínio em todos os quatro lugares, por exemplo, MarketingServer:3333. (Você deve usar o protocolo HTTPS, para o qual a porta padrão é 443.)

  • O domínio deve ser codificado no valor StartPage (e nas URLs de destinatário de qualquer evento) do arquivo AppManifest.xml antes que o suplemento seja empacotado. Se você usar o Assistente de Publicação no Visual Studio para empacotar o suplemento, será solicitado o domínio e as Office Developer Tools para Visual Studio as inserem no valor StartPage para você, no lugar do token ~remoteWebUrl usado durante a depuração. Mas se você não estiver usando o Assistente de Publicação, deverá substituir manualmente o token pelo domínio (e protocolo); por exemplo https://MarketingServer ou https://MarketingServer:3333.

Erro de tempo de execução dizendo que não há certificado com esse número de série

Se você tiver certeza de que tem o número de série de certificado correto no web.config e pode ver o certificado no Repositório de Certificados do Windows, pode haver um caractere extra oculto no número de série no web.config. Isso acontecerá se o número de série for copiado e colado do Console de Gerenciamento da Microsoft. Exclua todo o valor do número de série do web.config e o retipo manualmente .

Confira também