2016-03-29 7 views
0

Ich versuche SSO über SAML für meinen Influitive Hub zu implementieren. Ich habe ihre Dokumentation here gefolgt und habe meine Umgebung nach ihren Spezifikationen eingerichtet. Ich habe den Fingerabdruck meines Zertifikats sowie einen Endpunkt, um ihre SAMLRequest's über den QueryString zu behandeln.Wie implementieren Sie SAML für SSO mit Influitive?

Ich benutze den Web Browser SSO Anwendungsfall skizziert here.

Um meine SAML Antwort zu bilden, folgte ich den Beispielen here.

Ich folgte auch this Beispiel für das Generieren eines Zertifikats, sowie das Generieren und Unterschreiben meiner SAML-Antwort. In meinen Bemühungen, meine Implementierung zu beheben, änderte ich jedoch die Signiermethode zu SHA1.

Für mein Formular, gebunden ich Werte von meinem Code-Behind zu einem HTML-Formular, die gebucht, im Wesentlichen dieses:

<form method="post" action="https://{myhub}.influitive.com/saml/consume" /> 
    <input type="hidden" name="SAMLResponse" value="{Base64EncodedStringofSAMLResponse}" /> 
    <input type="hidden" name="RelayState" value="https://{myhub}.influitive.com/about" /> 
</form> 

<script> 
    if ("{Base64EncodedStringofSAMLResponse}" != "") { 
     window.onload = function() { 
      document.forms[0].submit(); 
     } 
    } 
</script> 


Das Problem ist, wenn mein FORMULARPLZ, halte ich 500 Internal Server-Fehler bekommen , obwohl meine SAML-Antwort ordnungsgemäß erstellt, signiert und codiert wurde. Wie behebe ich das?

Antwort

0

Das Problem ist eigentlich von einem unnötigen "Issuer" -Tag in meiner SAML-Antwort.

Ich habe zwei von ihnen basierend auf Beispielen, die ich online gefunden. Ich nahm die erste Instanz des Issuer-Tags heraus, verließ aber die zweite Instanz innerhalb des Assertion-Tags und es funktionierte. Influitive Unterstützung suchte die Protokolle für meinen Hub auf und schickte mir eine Fehlermeldung, die ungefähr das sagte.

Hier ist ein Beispiel für die korrekt gebildete, signierte SAML-Antwort.

<samlp:Response 
xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" 
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
Destination="https://{YOURHUB}.influitive.com/saml/consume" 
ID="{A GUID}" 
IssueInstant="{CURRENT UTC TIME}" 
Version="2.0" 
InResponseTo="{ID of Influitive SAMLRequest, or leave blank for IdP initiated SSO}"> 
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> 
    <SignedInfo> 
     <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /> 
     <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /> 
     <Reference URI="#_f44dfe01e93143d7b1e1b9e826ace708"> 
      <Transforms> 
       <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /> 
      </Transforms> 
      <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /> 
      <DigestValue>{The DigestValue}</DigestValue> 
     </Reference> 
    </SignedInfo> 
    <SignatureValue>{The SignatureValue}<SignatureValue> 
    <KeyInfo> 
     <X509Data> 
      <X509Certificate>{The X509Cert}</X509Certificate> 
     </X509Data> 
    </KeyInfo> 
</Signature> 
<samlp:Status> 
    <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success" /> 
</samlp:Status> 
<saml:Assertion 
    ID="{A SECOND GUID}" 
    IssueInstant="{CURRENT UTC TIME}" 
    Version="2.0"> 
    <saml:Issuer>{Name of the Issuer. Shouldn't really matter}</saml:Issuer> 
    <saml:Subject> 
     <saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress" NameQualifier="Influitive-AdvocateHub">[email protected]</saml:NameID> 
     <saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer"> 
      <saml:SubjectConfirmationData NotOnOrAfter="{CURRENT UTC TIME + 1 MINUTE}" Recipient="https://{YOURHUB}.influitive.com/saml/consume" InResponseTo="{ID of Influitive SAMLRequest, or leave blank for IdP initiated SSO}" /> 
     </saml:SubjectConfirmation> 
    </saml:Subject> 
    <saml:Conditions NotBefore="{CURRENT UTC TIME}" NotOnOrAfter="{CURRENT UTC TIME + 1 MINUTE}"> 
     <saml:AudienceRestriction> 
      <saml:Audience>Influitive-AdvocateHub</saml:Audience> 
     </saml:AudienceRestriction> 
    </saml:Conditions> 
    <saml:AuthnStatement AuthnInstant="{CURRENT UTC TIME}"> 
     <saml:AuthnContext> 
      <saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified</saml:AuthnContextClassRef> 
     </saml:AuthnContext> 
    </saml:AuthnStatement> 
    <saml:AttributeStatement> 
     <saml:Attribute Name="FirstName" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic"> 
      <saml:AttributeValue xsi:type="xs:string">{SOME FIRST NAME}</saml:AttributeValue> 
     </saml:Attribute> 
     <saml:Attribute Name="LastName" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic"> 
      <saml:AttributeValue xsi:type="xs:string">{SOME LAST NAME}</saml:AttributeValue> 
     </saml:Attribute> 
     <saml:Attribute Name="Email" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic"> 
      <saml:AttributeValue xsi:type="xs:string">{[email protected]}</saml:AttributeValue> 
     </saml:Attribute> 
    </saml:AttributeStatement> 
</saml:Assertion> 

Wenn Sie weitere Fragen dazu haben, wie diese SAML-Antwort zu erzeugen, wie es mit einem Zertifikat zu signieren, oder kodieren oder so, informieren Sie mich bitte! Das war eine riesige PITA und ich würde die Gelegenheit genießen, anderen dabei zu helfen.