SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Sorry, this site hasn't been shared with you - Custom Claims Provider

Geprüfte Antwort Dieser Beitrag hat 1 Antworten

Ohne Rang
68 Beiträge
Ladislav erstellt 30 Sept. 2020 12:56
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Sehr geehrte Damen und Herren,

ich habe Active Directory Federation Services (ADFS) auf dem Server eingestellt. 

Nach der Einstellung des "SP Trusted Identity Token Issuer" konnte ich mich auch an die SharePoint Seite anmelden.

Nach dem installieren des Custom Claims Provider, kann ich mich mit neu erstellten Benutzern nicht anmelden. Die Anmeldung ist weiter möglich mit den Benutzern, welche schon vorher da waren.

Folgende 5 Einträge fehlen in dem ULS Log bei dem Benutzer, welcher sich auf die SharePoint Seite nicht anmelden kann.

Alle restlichen ULS Log Einträge sind identisch mit den Einträgen des Benutzers, welcher sich auf die SharePoint Seite anmelden kann.

Looking up / in database. UserAgent: Unknown
Checking database SPConfigurationDatabase Name=SharePoint_Config for path '/' for web app SPWebApplication Name=WebApplikationName
Entering Monitored Scope (SPConfigurationDatabaseSiteLookupProvider.LookupSite(application, sitePath)). Parent=SPSecurityTokenService.Issue
UsageLoggedSqlSession: Before executing command against SharePoint_Config. Command is dbo.proc_getSiteMap

Leaving Monitored Scope: (SPConfigurationDatabaseSiteLookupProvider.LookupSite(application, sitePath)) Execution Time=1.1335; CPU Milliseconds=0; SQL Query Count=1; Parent=SPSecurityTokenService.Issue

 

Ich danke Ihnen für Ihre Hilfe.

 

Mit freundlichen Grüssen

Ladislav

 

Alle Antworten

Ohne Rang
68 Beiträge
Ladislav Als Antwort am 23 Okt. 2020 17:07
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

public class CustomClaimProvider : SPClaimProvider

{

 

// I have added following two objects into the custom claims provider class

// which inherits from the class SPClaimProvider

protected SPTrustedLoginProvider SPTrust;

 

protected string IssuerName => SPOriginalIssuers.Format(SPOriginalIssuerType.TrustedProvider, SPTrust.Name);

 

// I have added following two methods into the custom claims provider class

// which inherits from the class SPClaimProvider

public static SPTrustedLoginProvider GetSPTrustAssociatedWithCP(string providerInternalName)

        {

            var lp = SPSecurityTokenServiceManager.Local.TrustedLoginProviders.Where(x => String.Equals(x.ClaimProviderName, providerInternalName, StringComparison.OrdinalIgnoreCase));

 

            if (lp != null && lp.Count() == 1)

            {

                return lp.First();

            }

           

            return null;

        }

 

        protected bool Initialize()

        {

            bool initialized = false;

 

            if (SPTrust == null)

            {

                SPTrust = GetSPTrustAssociatedWithCP(ProviderInternalName);

                if (SPTrust != null)

                {

                    initialized = true;

                }

            }

            else

            {

                initialized = true;

            }

 

            return initialized;

        }

 

       // I have called the method Initialize in following four methods

protected override void FillHierarchy

protected override void FillResolve(Uri context, string[] entityTypes, string resolveInput, List<PickerEntity> resolved)

protected override void FillResolve(Uri context, string[] entityTypes, SPClaim resolveInput, List<PickerEntity> resolved)

protected override void FillSearch

// I have replaced the calls of the protected SPClaim CreateClaim(string   

// claimType, string value, string valueType); method which is inherited from  

// the SPClaimProvider with following method. This Method below has one        

// parameter more and therefore does not conflict with the method from the      

// SPCLaimProvider class. The important part of this method is the parameter   

// IssuerName. Because this value builds the middle part of the token. The token

// must have this part identical with the token issuer to be able to login into

// the SharePoint site.

protected virtual SPClaim CreateClaim(string type, string value, string valueType, bool inputHasKeyword)

       {           

            return new SPClaim(type, value, valueType, IssuerName);

}

}

 

Following source helped me to solve this issue:

https://ldapcp.com/