Le serveur distant a retourné une erreur: (401 non autorisé. L'aide d'otite chronique dans ASP.NET
Je suis tenté de tirer quelques SharePoint 2013 liste des données que j'ai créé qui fonctionne très bien lors de l'exécution en local sur ma machine et quand exécuter localement le serveur. Je suis utilisateur les mêmes informations d'identification lors de l'exécution à la fois localement et localement sur le serveur. Le problème est lorsque je publie et accédez à mon ASP.NET l'application sur le serveur j'obtiens le "Le serveur distant a retourné une erreur: (401) non autorisée". Erreur...
J'ai regardé un tas de posts sur stackoverflow et quelques autres articles sur le web
Ceci souligne le fait que le contexte semble être l'utilisation d'IUSR:
http://blogs.msdn.com/b/sridhara/archive/2014/02/06/sharepoint-2013-csom-call-from-web-part-fails-with-401-for-all-users.aspx
Cela parle à essayer de définir la valeur par défaut d'identification réseau:
https://sharepoint.stackexchange.com/questions/10364/http-401-unauthorized-using-the-managed-client-object-model
J'ai essayé d'utiliser les correctifs mentionnés dans l'article ainsi que d'essayer de forcer le contexte de l'utilisation DefaultNetworkCredentials mais pas de chance. Je voudrais pour l'application pour utiliser les informations d'identification de l'utilisateur connecté et non pas la machine...
Voici le code que j'utilise:
SP.ClientContext context = new SP.ClientContext("MySPDevInstance");
context.Credentials = CredentialCache.DefaultNetworkCredentials;
Entity entity = context.Web.GetEntity(collectionNamespace, collectionName);
LobSystem lobSystem = entity.GetLobSystem();
LobSystemInstanceCollection lobSystemInstanceCollection = lobSystem.GetLobSystemInstances();
context.Load(lobSystemInstanceCollection);
context.ExecuteQuery();
LobSystemInstance lobSystemInstance = lobSystemInstanceCollection[0];
FilterCollection filterCollection = entity.GetFilters(filter);
filterCollection.SetFilterValue("LimitFilter", 0, 1000);
EntityInstanceCollection items = entity.FindFiltered(filterCollection, filter, lobSystemInstance);
Le serveur exécute IIS 6.0
Tout conseil serait grandement appréciée!
Merci
OriginalL'auteur Hidan | 2014-04-03
Vous devez vous connecter pour publier un commentaire.
Je présume que votre ASP.NET le site web est à l'aide de Windows Intégrée (NTLM) d'authentification. Un utilisateur authentifié de cette façon ne peut pas s'authentifier à un deuxième emplacement à partir du côté serveur (le serveur web.) Vous rencontrez ce qui est connu comme le "double saut" (1) la limitation de l'authentification NTLM. Vous devez utiliser un compte dédié sur le côté serveur, ou si vraiment vous voulez utiliser le connecté à l'identité de l'utilisateur, vous devez utiliser un schéma d'authentification qui permet de délégation, tels que Kerberos.
Si vous avez vraiment besoin de l'identité de l'utilisateur d'accéder aux données SharePoint et vous ne pouvez pas modifier le schéma d'authentification, puis la meilleure façon de le faire est d'utiliser le JavaScript otite chronique. Cela signifie que l'utilisateur s'authentifie directement vers le serveur SharePoint (un seul saut, pas de double) et votre ASP.NET site sert de la page contenant ce script pour l'utilisateur.
(1) http://blogs.msdn.com/b/knowledgecast/archive/2007/01/31/the-double-hop-problem.aspx
Oui, c'est l'idée @Hidan
Ok, enfin, a mis sur cette. J'ai de configuration kerberos, mais je suis maintenant obtenir "Le nom principal de cible est incorrect erreur". J'ai essayé de chercher autour pour voir ce que cela signifie par rapport à la technologie, je suis travailler avec, mais ont été infructueuses... des idées?
Oublié de mentionner également que lorsque j'exécute localement maintenant, je reçois "Le serveur distant a retourné une erreur: (401) non autorisée". Comme mentionné précédemment ce qui fonctionnait jusqu'à ce que la configuration de kerberos.
J'ai juste essayé de forcer l'authentification NTLM en l'ajoutant à la cache d'informations d'identification dans mon code et en passant à la SharePoint contexte et je récupère les données en local sur ma machine. Mais pas sur le serveur j'obtiens un "Accès refusé. Vous n'avez pas l'autorisation pour effectuer cette action ou accéder à cette ressource." erreur... Si j'ai bien ok que faire si j'ai essayer de changer le NTLM type de kerberos au lieu de cela, ce qui malheureusement m'a donné l' "Le serveur distant a retourné une erreur: (401 non autorisé." sur ma machine en local et sur le serveur...
OriginalL'auteur x0n
Installation de la crendentials par code:
Vous devez mettre ceci dans le fichier de configuration à modifier sans publication ou de recompiler l'application.
Vous devriez obtenir l'Enregistrés l'Utilisateur des informations d'Identification et de le passer à la NetWorkCredential
L'utilisateur connecté les informations d'identification ne sont pas disponibles lors de l'utilisation d'un défi-réponse schéma d'authentification tels que windows intégré (NTLM)
OriginalL'auteur Fals
Utiliser les informations d'Identification par Défaut fonctionné pour moi:
OriginalL'auteur Ricardo Rix
Juste pour ajouter un paramètre plus que j'ai rencontré. Si le compte est limité à uniquement l'accès à certains serveurs que d'ajouter la machine client pour ce compte. Par exemple, si une application web est hébergé sur Un Serveur et essayez de vous connecter à SharePoint 2010 sur le Serveur B avec compte ABC puis assurez-vous que le compte a accès à Un Serveur Active Directory. Normalement, le compte ANNONCES n'ont pas de restrictions pour se connecter à des machines, mais dans mon cas, le compte a été limité à seulement certaines machines. J'ai ajouté mon application web serveur hébergé sur le compte et cela a fonctionné.
OriginalL'auteur Ahmad Zia