Question

J'ai ce Cloudshare environnement comprenant sur 3 machines:

  • Un pour Sharepoint 2013 (c'est là que je développe avec VS2012 installé)
  • Un autre pour SQL Server 2012
  • Et un autre pour Active Directory

Je suis en train de créer une base de confiance application pour Sharepoint 2013 à l'aide de server-serveur de protocole.

J'ai suivi plusieurs guides:

Quand je lance le projet (code de modèle par défaut) à partir de VS et de la confiance de l'application, j'obtiens une exception dans la ligne suivante:

Uri hostWeb = new Uri(Request.QueryString["SPHostUrl"]);

using (var clientContext = TokenHelper.GetS2SClientContextWithWindowsIdentity(hostWeb, Request.LogonUserIdentity))
{
    clientContext.Load(clientContext.Web, web => web.Title);
    clientContext.ExecuteQuery(); // throws exception
    Response.Write(clientContext.Web.Title);
}

en Défaut.aspx.cs

L'exception pourrait être l'un des suivants:

Le serveur distant a retourné une erreur:(403) Interdit.

Le serveur distant a retourné une erreur:(401 non autorisé.

J'ai essayé plusieurs conseils de dépannage avec pas de chance.Je ne suis pas un SP2013 expert de sorte que toute aide sera appréciée.

Merci

Mise à JOUR

Voici le journal ULS les entrées liées à la demande:http://pastie.org/pastes/8395956/text

Était-ce utile?

La solution

pour des raisons de simplicité, je vais énoncer une évidence!

l'utilisateur n'est pas authentifié et des ressources requiert une authentification

cela me dit qu'il ya quelque chose de mal se passer avec la poignée de main (votre certificat n'est pas envoyé ou est le mal), car c'est un produit microsoft, le meilleur endroit est de regarder sur le site msdn.

pour le rendre clair s'il vous plaît lire ceci:

L'étape suivante est facultative.Cependant, nous vous conseillons de développer et test avec HTTPS activé.La désactivation de HTTPS peut vous causer un développeur manquer certaines questions lors de la construction d'une application qui permettrait de se produire lors d'un déploiement en production où ce dernier est nécessaire.

maintenant vous avez lu la note, lire la question que votre devoir!

OAuth exige maintenant SharePoint pour exécuter HTTPS, non seulement pour votre service mais aussi pour SharePoint 2013.Vous recevrez un 403 (interdit) message lors de la tentative de faire un appel à SharePoint à l'aide d'un test de le certificat.

Sur l'ordinateur où vous avez SharePoint 2013 est installé, vous pouvez vous tourner hors le HTTPS exigence cours de développement en utilisant les éléments suivants Applets de commande Windows PowerShell.

donc, c'est votre problème!pour obtenir autour d'elle, tout en développant faire:

cette powershell pour le test/développement:

$serviceConfig = Get-SPSecurityTokenServiceConfig
$serviceConfig.AllowOAuthOverHttp = $true
$serviceConfig.Update()

une fois fini, retour en arrière à la façon dont il a été!

$serviceConfig = Get-SPSecurityTokenServiceConfig
$serviceConfig.AllowOAuthOverHttp = $false
$serviceConfig.Update()

maintenant, je tiens également à noter:

Dans un niveau élevé de confiance app, il n'y a pas de jeton de contexte, même si vous utilisez le appredirect.fichier aspx.Le jeton de contexte est spécifique à des configurations que l'utilisation de Windows Azure Service de Contrôle d'Accès (ACS).Toutefois, un jeton d'accès est toujours nécessaire. Si vous êtes à l'aide d'un niveau élevé de confiance de la configuration de votre application web pour authentifier l'utilisateur de la même manière que SharePoint 2013 n' (qui est, l'application est responsable de la création de la partie utilisateur du jeton d'accès).

êtes-vous à l'aide de la tokenhelper classe pour obtenir les clientcontext?

        using (var clientContext = TokenHelper.GetS2SClientContextWithWindowsIdentity(hostWeb, Request.LogonUserIdentity))
        {
            clientContext.Load(clientContext.Web, web => web.Title);
            clientContext.ExecuteQuery();
            Response.Write(clientContext.Web.Title);
        }

aussi quels sont exactement vous d'essayer de faire comme vous peut-être besoin permissions en fonction de ce que vous faites!

Pour accéder à d'autres propriétés, vous pouvez avoir besoin de demander des autorisations sur le hôte web.

http://msdn.microsoft.com/en-us/library/fp179901.aspx

espérons que les réponses ci-dessus, votre question!vous devez assurez-vous que le dessus est fait correctement pour que cela fonctionne!


si c'est encore un problème que ses quelque chose de mal avec le guid qui est émis par vs2012, qui est automatiquement envoyé lorsque vous appuyez sur la touche F5, c'est au web.config à cette ligne:

<add key="IssuerId" 

modifier le guid de majuscules en minuscules:

de:

<add key="IssuerId" value="F2AE6B96-1FC0-43C6-B5D0-900117C491A4"/>

pour

<add key="IssuerId" value="f2ae6b96-1fc0-43c6-b5d0-900117c491a4"/>

bien évidemment votre guid va être différente de ci-dessus ;)

aussi note-vous besoin d'un certificat unique pour chaque application!assurez-vous également que le guid est le même que le powershell à l'aide de guid Get-SPTrustedSecurityTokenIssuer doit être le même que sur le web.config!

http://www.jamestsai.net/Blog/post/SharePoint-Provider-Hosted-App-401-Unauthorized-error-on-clientContextExecuteQuery().aspx

Mise à JOUR

Juste regardé votre fichier de log!

pour briser sa faute tout de suite avec l'authentification!quelle méthode utilisez-vous?ntlm?kerbos?ect...

Ce qui est fondamental pour savoir comment vous avez configuré votre batterie de serveurs d'authentification et de!

maintenant, il peut y avoir plusieurs questions se passe ici par les regards des erreurs!Je vous recommande de lire à travers les liens ci-dessous!Je recommande fortement une fois que vous avez lu les liens que si tout est correct dans votre programme d'installation à exécuter New-SPTrustedSecurityTokenIssuer cet exemple peut être trouvé dans mon dernier lien en bas de la page!cela pourrait résoudre vous problème avec le jeton de la partie et la bonne poignée de main entre les deux serveurs(validation des uns des autres).

1) le jeton n'est pas d'être envoyé en raison des paramètres de sécurité qui ne sont pas compatibles!

Si vous utilisez Windows en mode revendications pour l'authentification de l'utilisateur et de l' l'application web est configuré pour utiliser uniquement l'authentification Kerberos sans tomber à NTLM comme le protocole d'authentification, puis app l'authentification ne fonctionne pas.

http://technet.microsoft.com/en-us/library/ee806870.aspx

ou/et

2) à l'aide de votre serveur d'authentification serveur, c'est là que ça pourrait mal se passer!votre profil synchronisées??

pour 2013 serveur à serveur, assurez-vous que les appartenances de groupe sont synchronisées avec l'application de service Profil Utilisateur.

Si un profil d'utilisateur n'existe pour un utilisateur et les appartenances de groupe ne sont pas synchronisés, l'accès peut être refusé lorsque l'utilisateur est censé pour avoir accès d'une ressource donnée.Par conséquent, assurez-vous que les appartenances de groupe sont synchronisés avec le service de Profil Utilisateur application.

http://technet.microsoft.com/en-us/library/jj219806.aspx

maintenant, ce qui est nécessaire pour le serveur de configuration du serveur pour travailler!

Serveur-à-serveur d'authentification permet aux serveurs qui sont capables de serveur-à-serveur d'authentification pour l'accès aux ressources et de les solliciter de l'un de l'autre au nom des utilisateurs.Par conséquent, le serveur qui s'exécute SharePoint Server 2013 et que les services de l'entrants demande de ressource doit être capable d'exécuter deux tâches:

Pour réhydrater l'identité d'un utilisateur, un serveur qui peut effectuer serveur-à-serveur d'authentification des demandes d'accès à SharePoint les ressources.SharePoint Server 2013 prend les revendications de la prochaine un jeton de sécurité et se résout à un utilisateur de SharePoint.Par par défaut, SharePoint Server 2013 utilise l'intégré dans le service de Profil Utilisateur application pour résoudre l'identité.

et le résultat ci-dessus est:

Si un profil utilisateur et les appartenances de groupe pour l'utilisateur sont pas synchronisés, SharePoint Server 2013 incorrecte peut refuser l'accès pour une ressource donnée.Par conséquent, assurez-vous que les appartenances de groupe sont synchronisé avec l'application de service Profil Utilisateur.Pour Windows les revendications, l'application de service Profil Utilisateur importations les quatre clés de l'utilisateur les attributs décrits précédemment et les appartenances de groupe.

http://technet.microsoft.com/en-us/library/jj729797.aspx

le point est le jeton et l'authentification ne fonctionne pas correctement, soit parce que votre configuration est mauvaise avec le type de sécurité ou de configuration!sachant ce que vous avez fait sera determin où sa va pas!!!de toute évidence, elle ressemble de serveur à serveur auth est de se faire rejeter comme le jeton n'est pas transmis correctement.

Si vous croire que le protocole d'authentification est correcte, vous pouvez suivre ce guide une fois que vous avez lu les liens ci-dessus:

http://technet.microsoft.com/en-us/library/jj655400.aspx

le lien ci-dessus explique et démontre un serveur à l'autre des mesures spécifiques senarios

pour créer une confiance entre les deux serveurs (ce qui Crée une relation d'approbation entre un serveur à serveur principal.)

suivez ce guide!à l'aide de New-SPTrustedSecurityTokenIssuer

http://technet.microsoft.com/en-us/library/jj219695.aspx

désolé pour le long texte et de nombreuses des liens!comme à son serveur pour le serveur et le journal est générique/configuration que je peux vous donner une réponse définitive!mais ce que je sais, c'est la poignée de main entre les deux serveurs est mal ce qui signifie que vous avez manqué quelque chose avec la configuration initiale!les liens ci-dessus devrait permettre de résoudre votre problème entre la poignée de main pour transmettre les informations d'identification correctes pour fonctionner correctement!

Autres conseils

J'ai eu des problèmes similaires.Au lieu d'utiliser clientContext ou Tokenhelper, je suis passé à la nouvelle SharePointContext que vous pouvez lire ici: http://blogs.msdn.com/b/kaevans/archive/2013/09/24/introducing-sharepointContext-for-Provider-hosted-hosted-hosted-hosted-SharePoint-apps.aspx

Une fois que j'ai fait ce commutateur, mes problèmes de 401 et 403 ont disparu.Le nouveau SharePointContext utilise le TokenHelper sous-jacent, alors assurez-vous de disposer de la dernière version du fichier TokenHelper également.

Je pense que je sais que votre problème a été, les points de journalisation du serveur sur la machine client / serveur ne sont pas du temps en synchronisation.

"SPApplicationAuthenticationModule: No valid access token exists in the Authorization header, you should see a 401 challenge as a response to this request."

"SPSecurityTokenExtensions: Not Valid Before:10/11/2013 21:15:38, Valid To:09/06/2015 07:55:38."

J'avais fait face à une erreur similaire quelques jours de retour, et la résolution était d'avoir le temps de serveur et de la machine client pour être synchronisé.

Foundation  Application Authentication ajezq High SPApplicationAuthenticationModule: 
Error authenticating request, Error details: 
Header: 3000002;reason="The access token has expired.
It's valid from '4/29/2015 2:50:44 PM' and to '4/30/2015 2:50:44 AM'.";
category="invalid_client", Body: {"error_description":"Invalid JWT token. The token is not yet valid. 
Current time is 4\/29\/2015 10:44:25 AM and the token is Valid from 4\/29\/2015 2:50:44 PM."}  

Comment d&eacute;finir l

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top