2010-04-09 4 views
1

J'ai un contrôle ASCX (les WebParts ne sont pas utilisés dans cette solution) qui interroge les données de CRM 4 via l'API fournie par Microsoft.Crm.Sdk et Microsoft.Crm.SdkTypeProxy.Intégration de Dynamics CRM avec Sharepoint ASCX SecurityException Édition

La solution fonctionne jusqu'à ce qu'il soit déployé sur Sharepoint.

Dans un premier temps, j'ai reçu l'erreur suivante:

[SecurityException: That assembly does not allow partially trusted callers.] 
    MyApp.SharePoint.Web.Applications.MyAppUtilities.RefreshUserFromCrm(String login) +0 
    MyApp.SharePoint.Web.Applications.MyApp_LoginForm.btnLogin_Click(Object sender, EventArgs e) +30 
    System.Web.UI.WebControls.Button.OnClick(EventArgs e) +111 

Alors j'ai essayé envelopper le code d'appel dans le ASCX avec SPSecurity.RunWithElevatedPrivileges:

SPSecurity.RunWithElevatedPrivileges(delegate() 
{ 
    // FBA user may not exist yet or require refreshing 
    MyAppUtilities.RefreshUserFromCrm(txtUser.Text); 
}); 

Mais cela a donné lieu à l'erreur suivante (I » Je pense que RunWithElevatedPrivileges n'est pas pour ce genre de chose de toute façon, mais quelqu'un l'a suggéré):

[SecurityException: Request for the permission of type 'Microsoft.SharePoint.Security.SharePointPermission, Microsoft.SharePoint.Security, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c' failed.] 
    MyApp.SharePoint.Web.Applications.MyApp_LoginForm.btnLogin_Click(Object sender, EventArgs e) +0 
    System.Web.UI.WebControls.Button.OnClick(EventArgs e) +111 

Lorsque j'élève le niveau de confiance dans le site Sharepoint à plein, tout fonctionne correctement, mais j'ai besoin de trouver une solution qui utilise une confiance minimale (ou une confiance minimale personnalisée). J'essaie aussi de ne rien ajouter au GAC. Des idées?

Je suppose que la question est INTERVENUES lorsque vous essayez d'appeler la fonctionnalité de Microsoft.Crm.*.

+0

Très étrange ... ce problème est soudainement passé à un problème de sécurité à propos de AspNetHostingPermission puis finalement résolu lui-même pour autant que je sache. Je me demande si le problème était dû en partie à une machine virtuelle et à un deuxième utilisateur connecté en même temps ?! (Le problème a disparu quand un autre utilisateur est rentré chez lui) Une expérience très frustrante, mais au moins, elle semble résolue maintenant. – Gavin

+0

Bugga - le problème est de retour. Donc encore besoin de résoudre. – Gavin

+0

Je suis juste allé ajouter mon assemblage personnalisé au GAC à la fin car il semble que c'est ce que l'entreprise faisait de toute façon. – Gavin

Répondre

1

J'utiliser le GAC.

Je comprends d'où vous venez. J'ai essayé d'éviter d'utiliser le GAC quand j'ai commencé avec le développement de SharePoint. Mais c'est vraiment le chemin à parcourir.

Ajouter ce qui suit dans le manifest.xml de votre package de solution:

<Assemblies> 
    <Assembly Location="MyApp.SharePoint.Web.Applications.dll" DeploymentTarget="GlobalAssemblyCache" /> 
</Assemblies> 

Et puis déployer votre package en utilisant:

stsadm.exe -o deploysolution -name MyApp.wsp -immediate -allowgacdeployment -force 

Si vous voulez continuer à rester en dehors du GAC, vous peut essayer d'ajouter ce qui suit à AssemblyInfo.cs:

[assembly: AllowPartiallyTrustedCallers] 

Mais si vous allez alors appeler DLLs (li ke Microsoft.Crm) et si ces DLL n'autorisent pas les appelants partiellement approuvés, alors vous êtes bloqué.

En outre, si vous avez pas déjà, vous aurez probablement besoin de create a custom policy file.C'était la création manuelle et l'enregistrement d'un fichier de politique personnalisé qui accordait des privilèges trop larges qui m'ont finalement convaincu de passer au GAC. Je n'ai pas regardé en arrière depuis.

+0

À la votre Rich. Je suis allé avec l'option GAC moi-même - un sacré beaucoup moins douloureux! – Gavin

0

Quelle méthode de Microsoft.Crm.Sdk lancers francs exactement SecurityException? Vérifiez sur MSDN et voyez quelles autorisations ont besoin d'être appelé.

En ce qui concerne à RunWithElevatedPrivileges, vous pouvez le voir documentation dont il a besoin

[SharePointPermissionAttribute(SecurityAction.Demand, Impersonate=true)] 
[SharePointPermissionAttribute(SecurityAction.Demand, ObjectModel=true)] 

Et l'utilisateur dans les commentaires a fourni un exemple d'autorisation CAS définir pour activer ces autorisations:

<IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="Assertion, Execution, ControlThread, ControlPrincipal, RemotingConfiguration, UnmanagedCode" /> 
<IPermission class="Microsoft.SharePoint.Security.SharePointPermission, Microsoft.SharePoint.Security, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" version="1" ObjectModel="True" Impersonate="True" UnsafeSaveOnGet="True"/> 

Sinon, vous don N'ayez pas les permissions nécessaires pour appeler le code si l'assembly n'est pas entièrement approuvé. La même chose va probablement avec une méthode de Microsoft.Crm.Sdk

Questions connexes