2015-07-01 5 views
13

यह में .... मेरे सिर मैं यहाँ क्या याद आ रही है कर रहा है को प्रमाणीकृत नहीं ..., टाइमस्टैम्प के साथ कुछ हो क्योंकि जब मैं उन के साथ खेलते हैं मैं अलग त्रुटियों मिल चाहिए ...WS-ट्रस्ट पीएचपी

मैं निम्नलिखित लिफाफा (जो कैसे प्रदाता मुझे दे दिया उपयोग करने के लिए) मिल गया है लेकिन यह मुझे

<s:Body> <s:Fault> <s:Code> <s:Value> s:Sender</s:Value> <s:Subcode> <s:Value xmlns:a="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> a:InvalidSecurity</s:Value> </s:Subcode> </s:Code> <s:Reason> <s:Text xml:lang="en-US"> An error occurred when verifying security for the message.</s:Text> </s:Reason> </s:Fault> </s:Body> 
इस

देने keepis मेरी कोड है:

$c = $this->getTimestamp(); 
    $e = $this->getTimestamp(300); 


$envelope = ' 
     <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
     <s:Header> 
      <a:Action s:mustUnderstand="1">http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Issue</a:Action> 
      <a:MessageID>urn:uuid:4137dbed-db9f-40d9-ba9c-6fc82eb8aa46</a:MessageID> 
      <a:ReplyTo> 
       <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address> 
      </a:ReplyTo> 
      <a:To s:mustUnderstand="1">https://sts.service.net/adfs/services/trust/13/usernamemixed</a:To> 
      <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> 
       <u:Timestamp u:Id="_0"> 
        <u:Created>'.$c.'</u:Created> 
        <u:Expires>'.$e.'</u:Expires> 
       </u:Timestamp> 
       <o:UsernameToken u:Id="uuid-4137dbed-db9f-40d9-ba9c-6fc82eb8aa46"> 
        <o:Username>'.$username.'</o:Username> 
        <o:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">'.$password.'</o:Password> 
       </o:UsernameToken> 
      </o:Security> 
     </s:Header> 
     <s:Body> 
      <trust:RequestSecurityToken xmlns:trust="http://docs.oasis-open.org/ws-sx/ws-trust/200512"> 
       <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>'.$appliesTo.'</wsa:Address> 
        </wsa:EndpointReference> 
       </wsp:AppliesTo> 
       <trust:KeyType>http://docs.oasis-open.org/ws-sx/ws-trust/200512/Bearer</trust:KeyType> 
       <trust:RequestType>http://docs.oasis-open.org/ws-sx/ws-trust/200512/Issue</trust:RequestType> 
      </trust:RequestSecurityToken> 
     </s:Body> 
     </s:Envelope> 
     '; 


     $soap_do = curl_init(); 
     curl_setopt($soap_do, CURLOPT_URL,"https://sts.service.net/adfs/services/trust/13/usernamemixed"); 
     curl_setopt($soap_do, CURLOPT_FOLLOWLOCATION, 1); 
     curl_setopt($soap_do, CURLOPT_HEADER, 0); 
     curl_setopt($soap_do, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($soap_do, CURLOPT_CONNECTTIMEOUT, 20); 
     curl_setopt($soap_do, CURLOPT_TIMEOUT,  20); 
     curl_setopt($soap_do, CURLOPT_SSL_VERIFYPEER, 0); 
     curl_setopt($soap_do, CURLOPT_SSL_VERIFYHOST, 0); 
     curl_setopt($soap_do, CURLOPT_POST,   true);    
     curl_setopt($soap_do, CURLOPT_POSTFIELDS,  $envelope); 
     curl_setopt($soap_do, CURLOPT_HTTPHEADER,  array('Content-Type: application/soap+xml; charset=utf-8')); 

     $this->payload = curl_exec($soap_do); 

उत्तर

9

आप दोनों Created तत्व और Expires तत्व में वर्तमान टाइमस्टैम्प लगा रहे हैं। इसका मतलब है कि जब रिसीवर आरएसटी प्राप्त करता है, तो संदेश समाप्त हो जाएगा और रिसीवर को इसे अस्वीकार करने के लिए मजबूर किया जाएगा। उदाहरण का प्रयोग करें .:

gmdate("Y-m-d\TH:i:s\Z", time() + 300); 

Expires तत्व के लिए। साथ ही सर्वर सिंक्रनाइज़ किया जाना चाहिए ग्राहक पर समय:

इसके अलावा घड़ी बहाव लिए जाँच करें।

इतना ही नहीं बल्कि: डिफ़ॉल्ट ADFS 2.0 से कोशिश करते हैं और जवाब में टोकन एन्क्रिप्ट तो यह भरोसा पार्टी के लिए एक एन्क्रिप्शन प्रमाण पत्र की विन्यास की आवश्यकता होगी। सुनिश्चित करें कि आपने appliesTo से जुड़े इकाई के लिए कॉन्फ़िगर किया है। एडीएफएस त्रुटि लॉग आपको उस त्रुटि के बारे में एक संकेत देना चाहिए।

+0

इस समस्या का समाधान नहीं किया। मैं टाइम स्टांप सिंक्रनाइज़ समय – renevdkooi

+0

अतिरिक्त टिप्पणी के साथ खेल की कोशिश की है; अन्यथा कोड ठीक है और मेरे लिए काम करता है –

+0

और एन्क्रिप्शन प्रमाण पत्र के बारे में एक टिप्पणी के बारे में –

0

मैं समस्या को हल करने के लिए निम्न किया था। मैं CURRENT_TIME बदल गया है - 300 सेकंड और CURRENT_TIME + 3600 सेकंड

यह काम करता है