2013-02-07 38 views
7

Tôi quan tâm đến việc triển khai OpenID và tôi đã đọc về nó, nhưng vẫn còn một vài khía cạnh mà tôi hơi bối rối.Thực hiện OpenID với PHP

Tôi đã thấy nhiều biểu đồ luồng của tương tác và chi tiết từng bước, chẳng hạn như this one, nhưng tất cả đều bỏ qua chi tiết về những gì xảy ra khi đăng nhập thành công. Tất cả mọi thứ tôi đã đọc nói một cái gì đó dọc theo dòng "khi đăng nhập thành công, người dùng được chuyển hướng trở lại trang web." Vâng, làm cách nào để trang web của tôi biết rằng thông tin đăng nhập đã thành công? Cookie có được đặt không, tôi có nhận lại POST không?

Ví dụ, đây là các chi tiết từ liên kết tôi bao gồm

9. User POSTs response to OpenID Server. 
10. User is redirected to either the success URL or the failure URL returned in (5) depending on the User response 

//this is the step that it says tells me I've had a succes/failure upon login 
5. Consumer inspects the HTML document header for <link/> tags with the attribute rel set to openid.server and, optionally, openid.delegate. The Consumer uses the values in these tags to construct a URL with mode checkid_setup for the Identity Server and redirects the User Agent. This checkid_setup URL encodes, among other things, a URL to return to in case of success and one to return to in the case of failure or cancellation of the request 

Tôi không khá chắc chắn làm thế nào để giải thích đó. Điều gì đặc biệt cho tôi biết rằng đăng nhập đã thành công? Từ những gì tôi thu thập, có vẻ như một cái gì đó trong tiêu đề được thiết lập, nhưng làm cách nào để truy cập nó? Giả sử tôi tìm ra đăng nhập đã đăng nhập thành công, điều đó có nghĩa là tôi có thể tiếp tục và tiếp tục đặt cookie/phiên liên quan đến trang web của mình không?

Edit- tôi thấy LightOpenID và nó xuất hiện cho phù hợp với nhu cầu của tôi, nhưng tôi vẫn còn một chút không chắc chắn về điều gì đó

Tôi đã thử nghiệm nó trên localhost và có google đăng nhập để làm việc. Khi đăng nhập tôi nhận được một URL như

User https://www.google.com/accounts/o8/id?id=sdlkfjlkwliej9392010fjos has logged in. 

Kiểm tra mã này, nó được tạo ra bởi những điều sau

echo 'User ' . ($openid->validate() ? $openid->identity . ' has ' : 'has not ') . 'logged in.'; 

Tôi giả định này có nghĩa là tôi chỉ đơn giản là kiểm tra $ openid-> validate() để đăng nhập ? Liệu $ openid-> nhận dạng có giống nhau mỗi lần đối với tài khoản google đã cho không? Tôi giả sử có, nếu không sẽ không có cách nào để theo dõi người dùng mỗi lần. Nếu người dùng đã đăng nhập, tôi có thể đặt cookie, phiên và bất kỳ nội dung thú vị nào khác mà tôi cho là cần thiết, đúng không?

+0

Thông tin thêm ở đây: http://stackoverflow.com/questions/3995011/log-in-the-user-with-lightopenid – ethrbunny

+0

câu trả lời trước có thể được hoàn thành với http://stackoverflow.com/questions/5463029/lightopenid-validate-fail-on-google-apps/15848917#15848917 –

Trả lời

1

Dưới đây là một số mã tôi sử dụng:

require '../../php/lightopenid-lightopenid/openid.php'; 

if(isset($_COOKIE[ 'claimed_id' ])) 
{ 
    $claimed_id = $_COOKIE[ 'claimed_id' ]; 
    try 
    { 

      if(!isset($_GET['openid_mode'])) 
      { 
          $openid = new LightOpenID; 
          $openid->identity = 'https://www.google.com/accounts/o8/id'; 
          header('Location: ' . $openid->authUrl()); 
      } 
      elseif($_GET['openid_mode'] == 'cancel') 
      { 
        unset($claimed_id); 
        setcookie("claimed_id", 0, time() - 3600, "/"); 
      } 
      else 
      { 
        $openid = new LightOpenID; 

        if($openid->validate()) 
        { 
        // different login 
          if ($_REQUEST[ 'openid_claimed_id' ] != $claimed_id) 
          { 
            unset($claimed_id); 
            setcookie("claimed_id", 0, time() - 3600, "/"); 
          } 
        } 
        else 
        { 
        // cant validate 
          unset($claimed_id); 
          setcookie("claimed_id", 0, time() - 3600, "/"); 
        } 
      } 
    } 
    catch(ErrorException $e) 
    { 
      echo "Authentication error."; 
      error_log($e->getMessage()); 
      exit; 
    } 
} 

// fall through to rest of code... 
+0

Cảm ơn! Bạn có nhớ kiểm tra chỉnh sửa của tôi để xem những gì tôi đang nghĩ là sự thật? – user1104854

+0

Theo như tôi có thể nói ... nó đã được một thời gian .. sau khi thành công bạn nhận được một số bit trở lại từ OAuth .. kiểm tra các tiêu đề _REQUEST như: foreach ($ _REQUEST là $ key => $ value) { nếu (preg_match ("/^(p | iid | claim_id) $ /", $ key)) echo $ _REQUEST [$ key]. \ n "; } – ethrbunny

Các vấn đề liên quan