35 votes

Comment puis-je effectuer l'emprunt d'identité de WIF / revendications sans que la revendication ne soit mappée à un compte AD?

J'ai besoin d'effectuer de la recherche de l'emprunt d'identité dans SharePoint 2010 pour les Réclamations des utilisateurs. Pour mettre cela en contexte, je tiens d'abord à préciser de quelle manière je obtenir que cela fonctionne avec les comptes de Windows et ensuite discuter de Réclamations / WIF.

Les Comptes Windows

Je peux le faire pour le "classique" de Windows Intégrée des utilisateurs Authentifiés à l'aide de:

WindowsImpersonationContext wic = null;
try
{  
    WindowsIdentity impersonatedUser = new WindowsIdentity("john.doe@mydomain");
    wic = impersonatedUser.Impersonate();

    // do impersonated work here...
    // in my case this is a SharePoint KeywordQuery
}
finally
{
    if (wic != null)
    {
        wic.Undo();
    }
}

Pour obtenir le ci-dessus pour travailler l'identité de compte doit être dans le même domaine que l'utilisateur en cours et je dois veiller à ce que l'application propriétaire de piscine est:

  • Un compte de domaine dans un domaine qui a un "niveau fonctionnel de domaine Windows 2003 ou supérieur
  • A "agir en tant que partie du système d'exploitation" privilège sur la zone locale
  • A "emprunter l'identité d'un client après l'authentification" privilège sur la zone locale

(Note: si quelqu'un peut comprendre comment obtenir autour de la question où le compte courant doit être dans le même domaine que l'identité de compte, je suis toutes les oreilles.)

Les Revendications Des Comptes

Je voudrais faire la même chose avec les Revendications / WIF comptes. Ces comptes ne sont pas nécessairement associés à l'ANNONCE des comptes (j'ai besoin de croire qu'ils ne le sont pas).

Est-il un moyen de dire la STS que je veux emprunter l'identité d'un compte, en particulier, et pour me donner la marque appropriée pour ce compte? Je n'ai pas le mot de passe de l'utilisateur que je suis usurpation de l'identité.

Citant SharePoint Brew je dois composer avec mon code qui s'exécute sur un SharePoint web front end (WFE) qui appelle un Processeur de Requêtes via un WCF appel. Je veux que WCF appel à être dans le contexte de l'identité de l'utilisateur.

Le serveur web frontal de l' (Serveur1) webpart de recherche parle de proxy d'application de service. Les associés de recherche proxy d'application de service des appels locaux STS pour obtenir un jeton SAML pour l'utilisateur. Une fois le jeton SAML est recueillie, l'application de service de recherche proxy alors appel à un serveur exécutant le Processeur de Requêtes via WCF appel. Je vais appeler ce serveur "Serveur 2". 2 de serveur reçoit la demande entrante et valide le jeton SAML à l'encontre de ses locaux STS. Une fois validé, le Serveur 2 relie les différents composants afin de recueillir, de fusion, de sécurité et de garnitures de résultats de recherche. Serveur 2 envoie le garni résultats de la recherche à l'arrière du Serveur 1 qui sont ensuite présentés à l'utilisateur.

Un peu plus de recherches m'a conduit à chercher à ActAs et OnBehalfOf. Je crois que j'ai envie d'utiliser OnBehalfOf, mais je ne suis pas certain que l'un et l'autre travaillent encore. Quelques références que j'ai trouvés sont listés ci-dessous. De toute orientation est apprécié.

9voto

El Hombre Points 100

J'ai passé plusieurs mois à travailler sur d'essayer de résoudre ce problème et après avoir passé un long temps de travail avec Microsoft SharePoint et WIF ingénieurs sont venus à la conclusion que ce n'est pas possible. Il semble que le problème est essentiellement ce que Kirk fait allusion. Lors de la création d'une identité de session à l'aide de déclarations (par exemple, la création d'un SPClaim et à le transformer en SPUser), SharePoint n'est pas en fait la création d'un tout emprunt d'identité de la session. La session, qui est créé est compris uniquement par le modèle d'objet. Cela signifie que lorsque vous passez d'une étape à l'extérieur de la limite de l'application web et dans recherche vous sont effectivement effectuer un double saut parce que vous pénétrez dans un autre domaine d'application/espace de processus.

J'ai essayé de faire quelque chose de semblable à ce que eppesuig suggère et ne pouvait pas le faire fonctionner. Peut-être que si vous avez écrit un tout nouveau STS que pourrait générer la confiance demande de jeton que SharePoint accepterait alors vous pourriez être en mesure de contourner cela en utilisant les ActAs jeton (SharePoint ne peut absolument pas accepter le OnBehalfOf jeton). Cependant, les implications de sécurité de faire qui sont plutôt concernant. Théoriquement, il devrait fonctionner mais faire la coutume de STS et SharePoint pour s'entremêlent et de confiance qui s'est avéré être en dehors de mes capacités. J'aimerais voir quelqu'un d'autre essayer, si.

0voto

eppesuig Points 482

D'après ce que j'ai compris, vous ne pouvez utiliser directement aucune autre identité que la vôtre. Si vous souhaitez utiliser une fonction similaire à OnBehalfOf, vous avez besoin d'un STS capable de gérer la délégation. le STS vérifiera votre identité et autorisera ensuite l'utilisation d'identités déléguées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X