Partager via


SharePoint 2010에서 웹 응용 프로그램에 연결된 모든 클레임 공급자를 가져오는 방법

 최초 문서 게시일: 2011년 3월 27일 일요일

이 게시물에서는 이전에 몇 번 질문을 받은 적이 있는 내용인 웹 응용 프로그램에서 사용되는 클레임 공급자를 프로그래밍 방식으로 확인하는 방법에 대해 설명합니다. 일반적으로 현재 사용되고 있는 SPTrustedIdentityTokenIssuers를 확인하려는 경우 클레임 공급자를 확인합니다. 그러나 이 게시물에서 설명하는 방법을 사용하면 사용되고 있는 클레임 공급자뿐만 아니라 기본적으로 사용하도록 설정되지 않는 사용자 지정 클레임 공급자도 확인할 수 있습니다(기본적으로 사용하도록 설정되는 클레임 공급자는 여러 위치에서 사용됨).

클레임 공급자를 확인할 때 먼저 이해해야 하는 점은, 웹 응용 프로그램에 대해 사용하도록 설정되어 있는 항목을 찾아서는 안 된다는 것입니다. 많은 사용자들이 이 정보를 찾는 데 시간을 낭비하는 경우가 많습니다. 클레임 공급자는 웹 응용 프로그램 수준이 아니라 영역 수준에서 적용됩니다. 그러면 SharePoint URL이 주어졌을 때 이 정보를 어떻게 찾을 수 있을까요?

먼저, 원하는 URL을 기반으로 새 SPSite를 가져옵니다.

using (SPSite theSite = new SPSite("https://someUrl"))

{

}

SPSite 개체를 가져온 후에는 웹 응용 프로그램과 영역을 가져올 수 있습니다.

//get the web app

SPWebApplication wa = theSite.WebApplication;

//get the zone for the site

SPUrlZone theZone = theSite.Zone;

 

이 정보를 통해 영역의 SPIisSettings를 가져올 수 있습니다. 여기에 유용한 정보가 대부분 포함되어 있습니다.

//get the settings associated with the zone

SPIisSettings theSettings = wa.GetIisSettingsWithFallback(theZone);

 

영역 정보를 가져온 후에는 해당 영역에 대해 인증 공급자와 클레임 공급자를 모두 가져올 수 있습니다. 이러한 공급자 정보는 ClaimsAuthenticationProviders 및 ClaimsProviders에 포함되어 있습니다. 각 ClaimsAuthenticationProvider에는 정보가 극히 일부분만 포함되어 있으며, PowerShell에서 Get-SPTrustedIdentityTokenIssuers 등을 수행하면 이러한 정보만 가져오게 됩니다. 따라서 핵심적인 기본 개체를 가져오려면 ClaimsAuthenticationProvider를 사용하고 여기서 SPTrustedLoginProvider를 가져와야 합니다. 다행히도 이를 위한 코드 역시 쉽게 작성할 수 있습니다. 다음은 제가 LINQ를 사용하여 SPTrustedLoginProviders 목록을 쿼리하는 코드의 예제입니다. 이 예제에서는 SAML 클레임 공급자(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();

              }

       }

}

 

코드를 완성하기 위해 아래에 전체 코드를 붙여 넣겠습니다. 이 특정 시나리오에서는 영역에 연결된 모든 SPTrustedIdentityTokenIssuers를 찾고, 각 SPTrustedIdentityTokenIssuers에 대해 공급자의 이름과 URL(해당 공급자를 사용할 때 인증을 위해 리디렉션되는 위치)이 포함된 문자열을 만듭니다.

using (SPSite theSite = new SPSite("https://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);

                     }

              }

       }

}

 

이 문서는 번역된 블로그 게시물입니다. 원본 문서는 How To Get All Claims Providers Associated with a Web Application in SharePoint 2010을 참조하십시오.