Comment associer tous les fournisseurs de revendications à une application Web dans SharePoint 2010






Date de publication initiale de l’article : 27 mars 2011


La question suivante m’a été posée à plusieurs reprises : comment faire pour déterminer, par programme, les fournisseurs de revendications qui sont utilisés avec mon application Web ?  Cette question signifie généralement « quels sont les SPTrustedIdentityTokenIssuers utilisés ? », mais la méthode que je vais démontrer va également révéler les fournisseurs de revendications personnalisés qui ne sont pas activés par défaut (car s’ils sont activés par défaut, ils sont utilisés partout).


Il faut comprendre avant tout que si vous vous demandez ce qui est activé pour une application Web, vous n’appréhendez pas le problème par le bon bout (c’est d’ailleurs probablement pourquoi de nombreuses personnes ont des difficultés à trouver ces informations).  Vos fournisseurs de revendications vont être appliqués au niveau de la zone, et non au niveau de l’application Web.  Alors étant donné une URL SharePoint, comment déterminer ces informations ? 


Pour commencer, obtenez un nouveau SPSite basé sur l’URL qui vous intéresse :


using (SPSite theSite = new SPSite(“http://someUrl”))


{



}


 


Une fois que vous avez l’objet SPSite, vous pouvez obtenir l’application Web et la zone :


//get the web app


SPWebApplication wa = theSite.WebApplication;


 


//get the zone for the site


SPUrlZone theZone = theSite.Zone;


 


Avec ces informations, vous pouvez obtenir le SPIisSettings pour la zone, qui est l’emplacement où la plupart des choses intéressantes résident :


//get the settings associated with the zone


SPIisSettings theSettings = wa.GetIisSettingsWithFallback(theZone);


 


Une fois en possession de ces informations, je peux obtenir à la fois les fournisseurs d’authentification et les fournisseurs de revendications pour cette zone.  Ils se trouvent dans les deux propriétés suivantes :  ClaimsAuthenticationProviders et ClaimsProviders.  N’oubliez pas que chaque ClaimsAuthenticationProvider ne contient qu’un tout petit sous-ensemble des informations que vous obtenez lorsque vous exécutez une opération telle que Get-SPTrustedIdentityTokenIssuers dans PowerShell.  Si vous souhaitez vraiment obtenir l’objet sous-jacent principal, vous devez prendre votre ClaimsAuthenticationProvider et en obtenir un SPTrustedLoginProvider.  Fort heureusement, cela ne pose pas non plus trop de difficultés.  Voici un exemple dans lequel j’interroge une liste de SPTrustedLoginProviders à l’aide de LINQ ; notez que dans cet exemple, tout ce qui m’intéresse ce sont les fournisseurs de revendications SAML (également appelés SPTrustedIdentityTokenIssuer) :


//get the token service manager so we can retrieve the appropriate


//trusted login provider


SPSecurityTokenServiceManager sptMgr = SPSecurityTokenServiceManager.Local;


                                 


//get the list of authentication providers associated with the zone


foreach (SPAuthenticationProvider prov in theSettings.ClaimsAuthenticationProviders)


{


//make sure the provider we’re looking at is a SAML claims provider


       if (prov.GetType() == typeof(Microsoft.SharePoint.Administration.SPTrustedAuthenticationProvider))


       {


              //get the SPTrustedLoginProvider using the DisplayName


              var lp =


                     from SPTrustedLoginProvider spt in


                     sptMgr.TrustedLoginProviders


                     where spt.DisplayName == prov.DisplayName


                     select spt;


 


              //there should only be one match, so retrieve that


              if ((lp != null) && (lp.Count() > 0))


              {


                     //get the login provider


                     SPTrustedLoginProvider loginProv = lp.First();


 


              }


       }


}


 


Pour être complet, je vais coller le bloc de code entier ci-dessous.  Dans ce scénario spécifique, je recherchais tous les SPTrustedIdentityTokenIssuers associés à une zone et pour chacun d’eux je créais une chaîne avec le nom du fournisseur et l’URL vers laquelle vous seriez redirigé pour l’authentification lors de l’utilisation de ce fournisseur.


using (SPSite theSite = new SPSite(“http://someUrl”))


{


//get the web app


       SPWebApplication wa = theSite.WebApplication;


 


       //get the zone for the site


       SPUrlZone theZone = theSite.Zone;


 


       //get the settings associated with the zone


       SPIisSettings theSettings = wa.GetIisSettingsWithFallback(theZone);


 


       //if this isn’t a claims auth site then bail out


       if (!theSettings.UseTrustedClaimsAuthenticationProvider)


       {


              MessageBox.Show(“This is not a SAML claims auth site”);


              return;


       }


                                 


       //clear the list of providers out


       ProviderLst.Items.Clear();


 


       //get the token service manager so we can retrieve the appropriate


       //trusted login provider


       SPSecurityTokenServiceManager sptMgr = SPSecurityTokenServiceManager.Local;


                                 


       //get the list of authentication providers associated with the zone


       foreach (SPAuthenticationProvider prov in


              theSettings.ClaimsAuthenticationProviders)


       {


              //make sure the provider we’re looking at is a SAML claims provider


              if (prov.GetType() ==


       typeof(Microsoft.SharePoint.Administration.SPTrustedAuthenticationProvider))


              {


                     //get the SPTrustedLoginProvider using the DisplayName


                     var lp =


                           from SPTrustedLoginProvider spt in


                           sptMgr.TrustedLoginProviders


                           where spt.DisplayName == prov.DisplayName


                           select spt;


 


                     //there should only be one match, so retrieve that


                     if ((lp != null) && (lp.Count() > 0))


                     {


                           //get the login provider


                           SPTrustedLoginProvider loginProv = lp.First();


 


                           //get the login info


                           string provInfo = prov.DisplayName + ” – “ +


                                  loginProv.ProviderUri.ToString();


 


                           //add the login info to the list


                           ProviderLst.Items.Add(provInfo);


                     }


              }


       }


}


 



Ce billet de blog a été traduit de l’anglais. L’article d’origine se trouve à l’adresse How To Get All Claims Providers Associated with a Web Application in SharePoint 2010


Comments (0)

Skip to main content