2015-07-01 11 views
13

Nó đang làm đầu của tôi ở .... Tôi đang thiếu gì ở đây ... phải là thứ gì đó có dấu thời gian, bởi vì khi tôi chơi với những lỗi khác ...WS-Trust không xác thực bằng PHP

tôi đã có phong bì sau (đó là cách các nhà cung cấp đưa nó cho tôi để sử dụng) Nhưng nó đem lại cho tôi keepis

<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> 

đây là mã của tôi:

$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); 

Trả lời

9

Bạn đang đặt dấu thời gian hiện tại ở cả phần tử Created và phần tử Expires. Điều đó có nghĩa là khi người nhận nhận được RST, thông báo sẽ hết hạn và người nhận sẽ bị buộc phải từ chối nó. Sử dụng ví dụ:

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

cho phần tử Expires.

Đồng thời kiểm tra độ trễ của đồng hồ: thời gian trên máy khách cũng như máy chủ sẽ được đồng bộ hóa.

Cuối cùng nhưng không kém phần quan trọng: theo mặc định ADFS 2.0 sẽ thử và mã hóa mã thông báo trong phản hồi để nó yêu cầu cấu hình chứng chỉ mã hóa cho bên đặt cược. Đảm bảo rằng bạn đã định cấu hình một cho đối tượng được liên kết với appliesTo. Các bản ghi lỗi ADFS sẽ cung cấp cho bạn một gợi ý về lỗi đó.

+0

này không giải quyết vấn đề. Tôi đã thử chơi với các dấu thời gian – renevdkooi

+0

đã thêm nhận xét về thời gian được đồng bộ –

+0

và nhận xét về chứng chỉ mã hóa; nếu không mã là OK và làm việc cho tôi –

0

Tôi đã làm như sau để giải quyết vấn đề. Tôi đã thay đổi CURRENT_TIME - 300 giây và CURRENT_TIME + 3600 giây

Nó hoạt động