Compartir a través de


Solución de problemas de complementos de SharePoint de elevada confianza

Usar la herramienta Fiddler

La herramienta Fiddler gratuita puede usarse para capturar las solicitudes HTTP enviadas por el componente remoto del complemento a SharePoint.

Hay una extensión gratuita para la herramienta que descodifica automáticamente los tokens de acceso en las solicitudes.

Después de instalar Fiddler en el servidor de aplicaciones web, agregue el siguiente marcado a su archivo web.config para que las solicitudes procedentes de su aplicación web remota vayan por este proxy. De esta manera, puede capturar un seguimiento de Fiddler y ver la respuesta completa de SharePoint cuando obtenga un error.

Nota:

Asegúrese de quitar este marcado si no está ejecutando Fiddler. Si no quita el marcado, el complemento no podrá hacer solicitudes de HTTP.

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

Una vez instalado Fiddler, también puede comprobar los encabezados de respuesta de SharePoint, que incluyen un GUID de solicitud. Este GUID de solicitud es un identificador de correlación que puede buscar en los registros para buscar los errores de registro asociados a esa solicitud.

Error "401 No autorizado"

Hay varias causas para un error 401 Unauthorized cuando el complemento de elevada confianza accede por primera vez a SharePoint. Si usa el modelo de objetos de cliente (CSOM), el error tiene un aspecto como éste:

[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

Si usa el archivo TokenHelper y la identidad de Windows, el código que desencadena la excepción será similar al siguiente:

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

El primer paso para solucionar el problema es usar el depurador de Visual Studio para comprobar que el token de acceso y el objeto ClientContext se hayan creado correctamente. En caso afirmativo, investigue las siguientes posibilidades:

Posible problema y solución:

  • No se ha creado un perfil de usuario para el usuario que quiere acceder a la aplicación web remota. Cree el perfil de usuario.

  • Su complemento no tiene permisos en los recursos a los que está intentando acceder. Abra el Shell de administración de SharePoint y ejecute el siguiente cmdlet de Windows PowerShell. La variable $web es el sitio web de SharePoint al que intenta obtener acceso y $appPrincipal es el identificador del complemento. Para obtener más información, consulte Set-SPAppPrincipalPermission.

      Set-SPAppPrincipalPermission -Site $web -AppPrincipal $appPrincipal -Scope Site -Right FullControl
    
  • La aplicación web acepta solicitudes anónimas. Esto significa que no hay una verdadera identidad de usuario en el token de acceso. Asegúrese de que el acceso anónimo se ha deshabilitado en IIS para el directorio raíz de la aplicación web remota. También puede comprobar esto si depura la aplicación web remota y comprueba el valor de Request.LogonUserIdentity en el archivo .aspx.cs (o .vb) predeterminado para asegurarse de que no se trate de un usuario anónimo.

  • No se agregó el certificado digital al almacén de certificados de confianza. Asegúrese de que ha seguido los procedimientos de Empaquetar y publicar complementos de SharePoint de alta confianza.

Si los nombres de dominio en los archivos de configuración y en los formularios de registro no coinciden, podría impedir la autorización. Los siguientes cuatro valores tienen que ser exactamente los mismos:

  • El Dominio del complemento que se especifica cuando se registra la Complemento de SharePoint en AppRegNew.aspx.

  • El dominio donde se registró el certificado de seguridad de la aplicación web remota.

  • La parte de dominio del valor de la StartPage en el archivo AppManifest.xml.

  • La parte del dominio de las direcciones URL de los receptores de eventos especificados en el archivo AppManifest.xml.

En relación con este punto, tenga en cuenta lo siguiente:

  • Si el componente remoto del complemento de SharePoint usa cualquier puerto distinto de 443, debe incluir explícitamente el puerto como parte del dominio en los cuatro lugares; por ejemplo, MarketingServer:3333. (Debe usar el protocolo HTTPS, para el que el puerto predeterminado es 443).

  • El domino se tiene que codificar de forma rígida en el valor StartPage (y las direcciones URL de los receptores de eventos) del archivo AppManifest.xml antes de empaquetar el complemento. Si usa el Asistente para publicar en Visual Studio para empaquetar el complemento, se le pedirá el dominio y Office Developer Tools para Visual Studio lo insertará en el valor startpage automáticamente (en lugar del token que se usa durante la ~remoteWebUrl depuración. Pero si no usa el Asistente para publicación, debe reemplazar manualmente el token por el dominio (y el protocolo); por ejemplo https://MarketingServer o https://MarketingServer:3333.

Error de tiempo de ejecución donde se indica que no hay ningún certificado con ese número de serie

Si está seguro de que tiene el número de serie de certificado correcto en el web.config y puede ver el certificado en el Almacén de certificados de Windows, puede haber un carácter adicional oculto en el número de serie en el web.config. Esto sucede si el número de serie se copia y pega desde Microsoft Management Console. Elimine el valor de número de serie completo desde el archivo web.config y vuelva a escribirlo manualmente.

Vea también