मैं SAML2 IdP Salesforce को IdentityServer3 में बाहरी प्रदाता के रूप में कॉन्फ़िगर करने का प्रयास कर रहा हूं। मैं SustainSys/Saml2 लाइब्रेरी का उपयोग कर रहा हूं। इसलिए परीक्षण के उद्देश्य से मैंने SampleIdentityServer3 डाउनलोड किया है। और नीचे की तरह SAML2 IdP कॉन्फ़िगर किया गया है

    private void ConfigureSaml2(IAppBuilder app, string signInAsType)
    {
        ServicePointManager.Expect100Continue = true;
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3;

        var options = new Saml2AuthenticationOptions(false)
        {
            SPOptions = new SPOptions
            {
                EntityId = new EntityId("http://localhost:4589/IdSrv3/Saml2"),    
                MinIncomingSigningAlgorithm = "http://www.w3.org/2000/09/xmldsig#rsa-sha1"
            },
            SignInAsAuthenticationType = signInAsType,
            Caption = "SAML2p",

        };

        UseIdSrv3LogoutOnFederatedLogout(app, options);

        options.SPOptions.ServiceCertificates.Add(new X509Certificate2(
            AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "/App_Data/Sustainsys.Saml2.Tests.pfx"));

        var idp = new IdentityProvider(
            new EntityId("https://XXXXXX-dev-ed.my.salesforce.com"),
            options.SPOptions)
        {
            MetadataLocation = "https://XXXXXX-dev-ed.my.salesforce.com/.well-known/samlidp.xml",
            LoadMetadata = true,                
        };

        options.IdentityProviders.Add(idp);
        app.UseSaml2Authentication(options);
    }

ध्यान दें कि अगर मैं MinIncomingSigningAlgorithm को sh1 पर सेट नहीं करता तो सस्टेनिस लाइब्रेरी त्रुटि फेंकता है।

Sustainsys.Saml2.Exceptions.InvalidSignatureException: साइनिंग एल्गोरिथम http://www.w3.org/2000/09/xmldsig#rsa -sha1 से कमजोर है न्यूनतम स्वीकृत http://www.w3.org/2001/04/xmldsig- अधिक#rsa-sha256. यदि आप चाहते हैं इस हस्ताक्षर एल्गोरिथ्म की अनुमति दें, minIncomingSigningAlgorithm का उपयोग करें विन्यास विशेषता।

इसलिए मैंने त्रुटि से छुटकारा पाने के लिए MinIncomingSigningAlgorithm को "http://www.w3.org/2000/09/xmldsig#rsa-sha1" पर सेट किया।

लेकिन फिर मुझे अलग त्रुटि मिलती है

Sustainsys.Saml2.Exceptions.InvalidSignatureException: हस्ताक्षर में निहित कुंजी के साथ हस्ताक्षर सही ढंग से सत्यापित है, लेकिन वह कुंजी विश्वसनीय नहीं है।

मुद्दे पर आधारित #493 #735 मेटाडेटा में प्रमाणपत्र SAML2 प्रतिक्रिया में प्रमाणपत्र से मेल खाना चाहिए।

मेटाडेटा में प्रमाणपत्र है (सूचना प्रारंभ और समाप्ति मान)

  <ds:X509Data>
    <ds:X509Certificate>
       MIIGk... removed from brevity....tmv6J1g==
    </ds:X509Certificate>
  </ds:X509Data>

लेकिन SAML2 प्रतिक्रिया में (वह जो सस्टेनिस लाइब्रेरी द्वारा लॉग किया गया है)

<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" Destination="http://localhost:4589/IdSrv3/Saml2/Acs" ID="_19fd2d8d9aab0401f56fXXXXXXXXX" InResponseTo="id473a52c49f194bXXXXXXXXX"    IssueInstant="2018-08-27T20:10:04.296Z" Version="2.0">
    <saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">https://XXXXXXX-dev-ed.my.salesforce.com</saml:Issuer>
    <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/2000/09/xmldsig#rsa-sha1" />
            <ds:Reference URI="#_19fd2d8d9aab0401f56f642dXXXXXXXXXXXXX">
                <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#"><ec:InclusiveNamespaces xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#" PrefixList="ds saml samlp" /></ds:Transform>
                </ds:Transforms>
                <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
                <ds:DigestValue>fQiiyd0T57Ztr5BAfMFe9MTrhY0=</ds:DigestValue>
            </ds:Reference>
        </ds:SignedInfo>
        <ds:SignatureValue>
            B6hndlsBgY45J+hm8My2gPVo....removed for brevity....YT88ajt7jQ==
        </ds:SignatureValue>
        <ds:KeyInfo>
            <ds:X509Data>
                <ds:X509Certificate>
                    MIIENz... remove for brevity....y2Ul24Jyc4V/jJN
                </ds:X509Certificate>
            </ds:X509Data>
        </ds:KeyInfo>
        </ds:Signature>
        <samlp:Status>
            <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:AuthnFailed" />
        </samlp:Status>
    </samlp:Response>

मेटाडेटा में X509Certificate मान को देखते हुए और SAML2 प्रतिक्रिया में वे मेल नहीं खाते।

प्रश्न
क्या SAML2 प्रतिक्रिया में X509Certificate मान मेटाडेटा में X509Certificate मान से मेल खाना चाहिए? यदि हाँ, तो सस्टेनिस लाइब्रेरी हमेशा SAML2 प्रतिक्रिया से X509Certificate मान का उपयोग क्यों नहीं कर सकती?

अपडेट करें
यह देखने के लिए कि क्या मानों का मिलान करना काम करेगा, मैंने SAML2 प्रतिक्रिया से प्रमाणपत्र मान को अलग .cer फ़ाइल में सहेजा है। और फिर KeyInfoSerializer.cs फ़ाइल में मैंने ReadX509Certificate विधि को अपडेट किया (यह वह तरीका है जो मेटाडेटा से प्रमाणपत्र लोड करता है)

    private static SecurityKeyIdentifierClause ReadX509Certificate(XmlReader reader)
    {
        reader.ReadStartElement("X509Certificate", SignedXml.XmlDsigNamespaceUrl);
        ((XmlDictionaryReader)reader).ReadContentAsString();

        var cer = new X509Certificate2(AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "/App_Data/salesforcepublickey.cer");
        var clause = new X509RawDataKeyIdentifierClause(cer);
        reader.ReadEndElement();
        return clause;
    }

हालांकि, यह अभी भी त्रुटि फेंकता है The signature verified correctly with the key contained in the signature, but that key is not trusted.

3
LP13 27 अगस्त 2018, 23:57

2 जवाब

सबसे बढ़िया उत्तर

मिल गया।
यह सेल्सफोर्स पक्ष पर मुद्दा था। सेलफोर्स में, जब मैं लॉग की जांच करता हूं Identity->Identity Provider Event Log मुझे त्रुटि दिखाई देती है Error: User does not have access to this service provider

इसके लिए यूजर को परमिशन नहीं दी गई। भले ही उपयोगकर्ता सिस्टम एडमिनिस्ट्रेटर हो, कनेक्टेड ऐप तक पहुंच डिफ़ॉल्ट रूप से नहीं दी जाती है। अनुमति देने के लिए, 'उपयोगकर्ताओं को प्रबंधित करें -> उपयोगकर्ता' पर जाएं और जिस उपयोगकर्ता का आप परीक्षण कर रहे हैं उस पर संपादित करें पर क्लिक करें। प्रोफ़ाइल नाम लिंक पर क्लिक करें। जैसे सिस्टम प्रशासक। यह प्रोफाइल पेज पर ले जाता है। आप नीचे 'कनेक्टेड ऐप एक्सेस' तक स्क्रॉल कर सकते हैं और आप देखेंगे कि एक्सेस नहीं दिया गया है। पृष्ठ के शीर्ष पर प्रोफ़ाइल संपादित करें पर क्लिक करके पहुंच प्रदान करें।

3
LP13 28 अगस्त 2018, 01:48

इस से संबंधित नहीं है, लेकिन यह प्रश्न सबसे पहले आता है जब हम त्रुटि को Google पर यहां समाधान पोस्ट करते हैं। हमारे ASP.net एप्लिकेशन में एक तृतीय पक्ष प्रदाता से kentor प्रमाणन सेवा पुस्तकालय के साथ हमारा एकीकरण था और यह उपरोक्त त्रुटि के साथ विफल हो रहा था।

मुद्दा यह था कि आईआईएस किसी तरह सर्टिफिकेट स्टोर तक नहीं पहुंच पा रहा था। हमने अपनी वेबसाइट के लिए Application Pool पर loadUserProfile सेटिंग सक्षम की और यह पूरी तरह से चलने में सक्षम थी। हमने इसे विंडोज सर्वर 2016 पर लागू किया।

0
Abdul Rehman Sayed 3 पद 2019, 10:09