2017-06-15 6 views
3

Ich versuche, IdentityServer einzurichten, ADFS für Authentifizierung zu verwenden. Der Fluss wird:IdentityServer und ADFS

Benutzer -> Benutzerdefinierte App -> IS -> ADFS

Ich habe Setup fast alles, aber ich bin an der Kommunikation zwischen IS und ADFS stecken. Der Benutzer scheint erfolgreich in ADFS einzuloggen, aber ich erhalte eine Fehlermeldung:

ID4037: Der Schlüssel benötigt, um die Signatur verifizieren konnte nicht aus der folgenden Sicherheitsschlüsselkennung ‚SecurityKeyIdentifier

aufgelöst werden, wenn ich zurückkomme zu IS.

Es ist offensichtlich, dass es ein Problem mit den Tokensignaturzertifikaten auf der einen oder anderen Seite gibt. Ich habe erfolglos versucht, eine Dokumentation zu finden, die die Beziehung zwischen verschiedenen Zertifikaten erklärt.

Im Moment habe ich ein selbstsigniertes Zertifikat im IS, das Tokens signiert (eingerichtet mit der SigningCertificate-Eigenschaft von IdentityServerOptions) und ich habe ein AD-Zertifikat in ADFS zur Signierung von Tokens konfiguriert.

Gibt es eine Anleitung oder eine Empfehlung, wie man es richtig macht? Sollte es in beiden gleich sein oder sollte ich etwas anderes konfigurieren, damit es funktioniert?

EDIT Mit Fiddler ich das alles sehen kann, innerhalb ADFS fein läuft, und der Fehler ist, wenn die Ergebnisse auf IdentityServer gebucht werden. Die XML in wresult param geschrieben ist:

<t:RequestSecurityTokenResponse xmlns:t="http://schemas.xmlsoap.org/ws/2005/02/trust"> 
    <t:Lifetime> 
    <wsu:Created xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">2017-06-20T12:25:31.148Z</wsu:Created> 
    <wsu:Expires xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">2017-06-20T13:25:31.148Z</wsu:Expires> 
    </t:Lifetime> 
    <wsp:AppliesTo xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"> 
    <wsa:EndpointReference xmlns:wsa="http://www.w3.org/2005/08/addressing"> 
     <wsa:Address>urn:identityServer</wsa:Address> 
    </wsa:EndpointReference> 
    </wsp:AppliesTo> 
    <t:RequestedSecurityToken> 
    <saml:Assertion MajorVersion="1" MinorVersion="1" AssertionID="_fd1a14cd-4d18-407b-97d4-9f9dfcacd29a" Issuer="http://ssosrv.mydomain.com/adfs/services/trust" IssueInstant="2017-06-20T12:25:31.148Z" xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion"> 
     <saml:Conditions NotBefore="2017-06-20T12:25:31.148Z" NotOnOrAfter="2017-06-20T13:25:31.148Z"> 
     <saml:AudienceRestrictionCondition> 
      <saml:Audience>urn:identityServer</saml:Audience> 
     </saml:AudienceRestrictionCondition> 
     </saml:Conditions> 
     <saml:AttributeStatement> 
     <saml:Subject> 
      <saml:NameIdentifier>[email protected]</saml:NameIdentifier> 
      <saml:SubjectConfirmation> 
      <saml:ConfirmationMethod>urn:oasis:names:tc:SAML:1.0:cm:bearer</saml:ConfirmationMethod> 
      </saml:SubjectConfirmation> 
     </saml:Subject> 
     <saml:Attribute AttributeName="emailaddress" AttributeNamespace="http://schemas.xmlsoap.org/ws/2005/05/identity/claims"> 
      <saml:AttributeValue>[email protected]</saml:AttributeValue> 
     </saml:Attribute> 
     <saml:Attribute AttributeName="name" AttributeNamespace="http://schemas.xmlsoap.org/ws/2005/05/identity/claims"> 
      <saml:AttributeValue>Name Surname</saml:AttributeValue> 
     </saml:Attribute> 
     <saml:Attribute AttributeName="upn" AttributeNamespace="http://schemas.xmlsoap.org/ws/2005/05/identity/claims"> 
      <saml:AttributeValue>[email protected]</saml:AttributeValue> 
     </saml:Attribute> 
     </saml:AttributeStatement> 
     <saml:AuthenticationStatement AuthenticationMethod="urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport" AuthenticationInstant="2017-06-20T12:25:31.039Z"> 
     <saml:Subject> 
      <saml:NameIdentifier>[email protected]</saml:NameIdentifier> 
      <saml:SubjectConfirmation> 
      <saml:ConfirmationMethod>urn:oasis:names:tc:SAML:1.0:cm:bearer</saml:ConfirmationMethod> 
      </saml:SubjectConfirmation> 
     </saml:Subject> 
     </saml:AuthenticationStatement> 
     <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
     <ds:SignedInfo> 
      <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> 
      <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" /> 
      <ds:Reference URI="#_fd1a14cd-4d18-407b-97d4-9f9dfcacd29a"> 
      <ds:Transforms> 
       <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /> 
       <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> 
      </ds:Transforms> 
      <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> 
      <ds:DigestValue>6CeXXXXXXXXXXXXXXXXXXXX=</ds:DigestValue> 
      </ds:Reference> 
     </ds:SignedInfo> 
     <ds:SignatureValue>q9hJBFFFFFFFFFFFFFFFFFFFF==</ds:SignatureValue> 
     <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#"> 
      <X509Data> 
      <X509Certificate>MIIFnzXXXXXXXXXXXXXXXXXXXX</X509Certificate> 
      </X509Data> 
     </KeyInfo> 
     </ds:Signature> 
    </saml:Assertion> 
    </t:RequestedSecurityToken> 
    <t:TokenType>urn:oasis:names:tc:SAML:1.0:assertion</t:TokenType> 
    <t:RequestType>http://schemas.xmlsoap.org/ws/2005/02/trust/Issue</t:RequestType> 
    <t:KeyType>http://schemas.xmlsoap.org/ws/2005/05/identity/NoProofKey</t:KeyType> 
</t:RequestSecurityTokenResponse> 

Danke, Albert

Antwort

5

Gelöst es. Es war nicht mit der ADFS-Integration verbunden, sondern mit der Einrichtung der Verbundauthentifizierung in Identity Server. Ich habe zwei Authentifizierungsidentitätsanbieter für die Föderation verwendet: eine mit ADFS und eine mit WinAuth. Ohne einen Rückruf wurde die Antwort von ADFS von WinAuth verarbeitet, also habe ich für jeden von ihnen verschiedene Rückrufe konfiguriert und es funktioniert.

2

Aus dem Gedächtnis:

  • Sie müssen das IS-Zertifikat CER-Format konvertieren.
  • In mmc, klicken Sie mit der rechten Maustaste auf das Zertifikat und "Alle Aufgaben"/"Exportieren".
  • Klicken Sie sich durch den Exportassistenten, und wählen Sie: "Nein, exportieren Sie nicht den privaten Schlüssel". "DER codierte binäre X.509 (.CER)".
  • Wählen Sie den Dateinamen aus, in den exportiert und gespeichert werden soll.
  • Review-Optionen und "Fertig stellen".
  • Importieren Sie im ADFS-Assistenten die CER-Datei in die Registerkarte Zertifikate.
+0

Ich habe es geändert, um das gleiche Zertifikat in ADFS und in IS zu verwenden, und ich bekomme immer noch einen Fehler. Auf jeden Fall suche ich mehr nach einer Dokumentation/Richtlinie als nach einer spezifischen Lösung, die funktionieren könnte, aber ich würde nicht wissen warum. – Albert

+0

siehe unten: https://social.technet.microsoft.com/wiki/contents/articles/1420.ad-fs-2-0-id4037-the-key-need-to-verify-the-signature-not-resolve-from-the-following-security-key-identifier.aspx - möglicherweise müssen Sie Sperrung der Sperrung deaktivieren – stombeur

+0

@stombeur Ich habe es versucht, aber immer noch den gleichen Fehler ... – Albert