سؤال

أحاول حل هذه المشكلة لفترة من الوقت دون أن يحالفني الحظ، ربما يتمكن شخص يتمتع بخبرة أكبر في Sharepoint من تحديد مشكلتي.

يبدو تتبع مكدس الاستثناء في سجلات Sharepoint كما يلي:

System.IdentityModel.Tokens.SecurityTokenException: The issuer of the token is not a trusted issuer.    
at Microsoft.SharePoint.IdentityModel.SPLocalIssuerNameRegistry.GetIssuerName(SecurityToken securityToken)     
at Microsoft.IdentityModel.Tokens.Saml11.Saml11SecurityTokenHandler.CreateClaims(SamlSecurityToken samlSecurityToken)     
at Microsoft.IdentityModel.Tokens.Saml11.Saml11SecurityTokenHandler.ValidateToken(SecurityToken token)     
at Microsoft.IdentityModel.Tokens.SecurityTokenHandlerCollection.ValidateToken(SecurityToken token)     
at Microsoft.IdentityModel.Web.TokenReceiver.AuthenticateToken(SecurityToken token, Boolean ensureBearerToken, String endpointUri)     
at Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.SignInWithResponseMessage(HttpRequest request)     
at Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.OnAuthenticateRequest(Object sender, EventArgs args)     
at Microsoft.SharePoint.IdentityModel.SPFederationAuthenticationModule.OnAuthenticateRequest(Object sender, EventArgs eventArgs)     
at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()     
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

لقد ألقيت نظرة على الكود الذي تم فك ترجمته، ويبدو كما يلي:

 if (!accessProvider.SigningCertificate.Equals((X509Certificate) x509SecurityToken.Certificate))
    throw new SecurityTokenException(SPResource.GetString("IssuerIsNotTrusted"));

لذا يبدو أن رمز الأمان المستلم وشهادات موفر الوصول غير متطابقين.لقد ذهبت أبعد من ذلك، وقمت بإجراء تفريغ الأعطال، وتحميلها في Windbg وحاولت العثور على الشهادة التي لديها AccessProvider، ولست متأكدًا مما إذا كنت أبحث في المكان الصحيح، ولكن إذا كنت كذلك، فهذا يعني أنها تحتوي على شهادة خاطئة - كان الموضوع CN=SharePoint Security Token Service, OU=SharePoint, O=Microsoft, C=US, ، ومن الواضح أنه لم يتم تكوينه.

كنت أقوم بتسجيل مزود الهوية الخاص بي مثل هذا:

$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2("C:\temp\wcfsts.dev.cer")
$map1 = New-SPClaimTypeMapping -IncomingClaimType "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress" -IncomingClaimTypeDisplayName "Display Name" –SameAsIncoming
$realm = "http://sp2013.testweb.local"
$ap = New-SPTrustedIdentityTokenIssuer -Name "WSFederationSTS" -Description "WCF STS." –Realm $realm -ClaimsMappings $map1 -ImportTrustCertificate $cert -SignInUrl "http://wcfsts.dev/WSFederationSecurityTokenService.svc/Issue" -IdentifierClaim $map1.InputClaimType

لقد قمت أيضًا بتسجيل الشهادة مع New-SPTrustedRootAuthority.

هل كانت مفيدة؟

المحلول

لقد وجدت المشكلة عن طريق الصدفة، من خلال النظر في الأخطاء التي ربما ارتكبتها.
كنت أتطلع إلى تجول المطالبات ولاحظوا أنهم يسجلون مُصدر الرمز المميز باستخدام كود C#، لذلك قرروا أن يفعلوا الشيء نفسه واستخدموا مجال الموفر "https://intranet.contoso.com/_trust/"، لذلك قمت بتغييره للتو للحصول على المجال الخاص بي، مع ترك الجزء "_trust" - وبدأ العمل، لذا كان الاستثناء في السجلات مضللًا للغاية.

وبعد هذا وجدت مشاركة مدونة مع نفس المشكلة، وأتساءل لماذا لم ألاحظ ذلك من قبل.

نصائح أخرى

كنت أتبع بعض التعليمات من هذا الرابط:https://support.microsoft.com/en-us/help/3042604/the-convert-spwebapplication-command-cannot-convert-from-windows-claim

استخدم التنسيق التالي للأمر New-SPTrustedIdentityTokenIssuer:

$ap = New-SPTrustedIdentityTokenIssuer -Name $tokenIdentityProviderName -Description $TrustedIdentityTokenIssuerDescription -realm $siteRealm -ImportTrustCertificate $adfsCert -SignInUrl $signInUrl -UseDefaultConfiguration -IdentifierClaimIs EMAIL -RegisteredIssuerName $siteRealm

لم أكن متأكدًا مما سأضعه في RegisteredIssuerName، وقد تركته فارغًا سابقًا عندما كان يعمل، ولكن في هذه الحالة قمت بتعيينه على نفس $tokenIdentityProviderName.

بدأت أتلقى الخطأ "مصدر الرمز المميز ليس مصدرًا موثوقًا به" بعد ذلك.

لقد قمت بمسح قيمة RegisteredIssuerName:

Set-SPTrustedIdentityTokenIssuer -Identity $ap  -RegisteredIssuerName ""

وهذا حل المشكلة بالنسبة لي.

أعتقد أنه لكي يعمل RegisteredIssuerName، قد تحتاج إلى إضافة إدخال IssuerNameRegistry إلى web.config لتحديد مصدري الرموز المميزة الموثوقين.

<issuerNameRegistry 
  type="Microsoft.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry,
  Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, 
  PublicKeyToken=31bf3856ad364e35">
  <trustedIssuers>
      <add thumbprint="99fcfe2c70ebb571020ca8aa1b7633dfe1fa1d58" name="http://localhost:48924/WingtipSTS/" />
  </trustedIssuers>
</issuerNameRegistry>

مصدر إضافي:https://docs.microsoft.com/en-us/previous-versions/office/developer/sharepoint-2010/ff955607(v=office.14)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى sharepoint.stackexchange
scroll top