Tạo oauth trong wordpress site [wordpress.org]

Quảng cáo
Ads_ngang
Website dinhthuanit.com có bài Tạo oauth trong wordpress site [wordpress.org]

Trong bài viết trước mình có giới thiệu với các bạn sử dụng oauth trên wordpress.com, trong bài viết ngày hôm nay mình nói tới cách tạo oauth trong wordpress site (wordpress.org) chạy trên host của các bạn.

Như đã biết giao thức Oauth2 sử dụng để cho phép phần mềm kết nối vào dịch vụ web. Đây là giao thức tân tiến nhất được không ít các công ty lớn nhỏ sử dụng như: dropbox, box, google, github, soundcloud, window live,…và lúc này wordpress đã có plugin giúp bạn tạo và sử dụng oauth 1 cách dễ dàng.

Trước tiên, bạn tải plugin “wordpress oauth“, plugin này đã tích hợp thư viện Oauth PHP.

Oauth PHP Server Library :

  • PHP OAuth2 Server and Demo
  • PHP OAuth 2.0 Auth and Resource Server and Demo
  • PHP OAuth 2.0 (AS with SAML/BrowserID AuthN, with management REST API, see DEMO)

Oauth PHP Client Library:

  • PHP
  • PHP OAuth 2.0 client
  • OAuth2/OpenID Connect Client Library for PHP/Zend Framework 2

Xem bổ trợ các thư viên khác tại: Thư viện Oauth

Sau khi tải plugin về, giải nén và copy vào thư mục wp-content/plugins. Kích hoạt plugin từ menu Plugins.

Giờ chúng ta truy cập vào phần quản trị của plugin để cấu hình. Chọn vào menu Provider như hình dưới đây.

Tiếp đến, chúng ta thêm client để sử dụng API. Bạn có thể thêm nhiều client mỗi client hay consumer (người sử dụng API hay phần mềm thứ 3 sử dụng API). Điền tên client ở mục Name và địa điểm URL trả về của phần mềm sử dụng API ở mục Redirect URI . Trong ví dụ mình demo trên website, chạy trên localhost sử dụng xampp với địa chỉ: http://localhost/wordpress.

Nhấn nút add client, để quá trình tạo client hoàn tất, bạn sẽ thấy danh sách các consumer/client ở box “CONSUMER MANAGER” phía trên. Có 2 tin tức quan trọng bạn phải sử dụng đó là client id/key client secret/secret .

Nếu khóa ứng dụng, không thích cho phần mềm truy cập API của bạn nữa thì bấm vào liên kết Delete tương ứng với dòng client đó.

Ok, chúng ta đã đi được 1/3 chặng đường. Cũng giống với cách authorize trên wordpress.com, địa chỉ oauth có dạng http://example.com/oauth/ . Sử lý oauth với 2 bước.

Bước 1 (Authorize): lấy mã xác nhận code .

Truyền thông tin sau với phương thức GET vào địa chỉ: http://localhost/wordpress/oauth/authorize

  • client_id: thông số key của client, nếu bạn quên tin tức về consumer/client thì vào menu Provider .
  • response_type: giá trị tham số này bạn để là “code”.
  • state: tùy ý bạn. VD: abc

URL cuối cùng:

 http://localhost/wordpress/oauth/authorize?client_>  

Copy địa điểm này và gián vào trình duyệt, quá trình này bạn được chuyển hướng về địa điểm của ứng dụng và trả về tham số code .

Chú ý: nếu trang trả về 404, bạn phải flush rewrite lại permalink. Để thi hành việc này, bạn truy cập vào settings-> Permalinks -> nhấn vào nút Save Changes.

Bước 2: Request Token

Sau khi thu được mã code chúng ta chuyển qua bước cuối cùng lấy access_token , tham số này sẽ dùng cho mọi giao dịch có liên quan đến phiên làm việc người dùng , vd: lấy tin tức của user, đăng tin viết, xóa bài…

Sử dụng URL http://localhost/wordpress/oauth/request_token này để lấy mã access_token cùng theo với những tham số sau đây:

  • code: tham số này trùng với tham số code được trả về ở bước 1.
  • grant_type: điền giá trị là “authorization_code”
  • client_id: client key đã tạo ở bước đầu tiên.
  • client_secret: mã secret của client.

URL cuối cùng có dạng:

 http://localhost/wordpress/oauth/request_token/?code=b20901e251d6503091a5b4c606b1cf3b51b50a33&grant_type=authorization_code&client_>  

Để biết các tham số trả về bạn thử copy vào trình duyệt, kết quả sẽ là:

 {"access_token":"1b40d2f8b3363fb0d605ba48ba09824d5f35487e","expires_in":3600,"token_type":"bearer","scope":"","refresh_token":"a6358ae5103d7a28b84ce046f7d2660bfad92c19"} 

Trường hợp sử dụng CURL PHP, các tham số được truyền theo phương thức POST.

   $request_token    =    "http://localhost/wordpress/oauth/request_token"    ;     $curl     =     curl_init    (    )    ;     curl_setopt    (    $curl    ,  CURLOPT_URL  ,    $request_token    )    ;     curl_setopt    (     $curl    ,   CURLOPT_POST  ,     true     )    ;     curl_setopt    (     $curl    ,   CURLOPT_POSTFIELDS  ,     array    (     'code'    =>     $_GET    [    'code'    ]    ,     'grant_type'    =>     'authorization_code'    ,     'client_client_secret'    =>     $secret     )     )    ;     curl_setopt    (     $curl    ,   CURLOPT_RETURNTRANSFER  ,     1    )    ;     $rs     =     curl_exec    (     $curl     )    ;   

Bạn có thể dùng json_decode để tách riêng giá trị access_token .

   $token    =    json_decode    (    $rs    )    ;     $_SESSION    [    'token'    ]    =    $access_token    =    $rs    ->     access_token    ;     print_r    (    $token    )    ;   

 stdClass Object ( [access_token] =>  1b40d2f8b3363fb0d605ba48ba09824d5f35487e [expires_in] =>  3600 [token_type] =>  bearer [scope] =>  [refresh_token] =>  a6358ae5103d7a28b84ce046f7d2660bfad92c19 ) 

Các bạn cũng có thể có thể lưu access_token vào biến session hoặc csdl. Token sẽ hết hạn sử dụng sau 3600s. Như vậy chúng ta đã hoàn tất quá trình authorize sử dụng plugin wordpress authorize.

Mình sẽ demo thử một api, api này sẽ hiển thị tin tức của admin user.
http://localhost/wordpress/oauth/request_access?access_token=xxx
Chú ý:

  • api chỉ có thể hoạt động khi có tham số access_token .
  • Trình duyệt bổ trợ mọi phương thức để api cũng đều có thể hoạt động được, bạn có thể copy link trên và dán vào trình duyệt để thấy được kết quả ngay.

Ví dụ trên với ngôn ngữ php. Truyền với tham số POST và thông tin Authorization vào header.

   $request_access    =    "http://localhost/wordpress/oauth/request_access"    ;     $curl     =     curl_init    (    )    ;     curl_setopt    (    $curl    ,  CURLOPT_URL  ,    $request_access    )    ;     curl_setopt    (    $curl    ,  CURLOPT_HTTPHEADER   ,    array    (     'Content-type: application/x-www-form-urlencoded'    ,     'Authorization: Bearer '     .     $_SESSION    [    'token'    ]     )    )    ;     curl_setopt    (     $curl    ,   CURLOPT_POST  ,     true     )    ;     curl_setopt    (    $curl    ,  CURLOPT_POSTFIELDS  ,    array    (     'access_token'    =>     $_SESSION    [    'token'    ]    ,       )    )    ;       curl_setopt    (     $curl    ,   CURLOPT_RETURNTRANSFER  ,     1    )    ;     $rs     =     curl_exec    (     $curl     )    ;   

Lưu ý api được thiết kế đều trả về chuỗi JSON. Kết quả cho tỉ dụ trên là:

 {"ID":"1","user_login":"admin","user_nicename":"admin","user_email":"[email protected]","user_url":"","user_registered":"2014-07-15 02:07:26","user_status":"0","display_name":"admin","spam":"0","deleted":"0"} 

Khi access_token bị hết hiệu lực api sẽ trả về chuỗi JSON lỗi thông báo access_token không còn có công năng nữa:

 {"error":"invalid_grant","error_description":"The access token provided has expired."} 

Trong tình huống này, bạn cần authorize lại từ đầu để làm được được access_token mới.

Tải demo source code tại đây.

WordPress authorize Plugins hiện tại bổ trợ duy nhất api này, các apis được xây dựng trong file plugins/oauth2-provider/lib/classes/OAuth2_API.php. Mở tệp này với notepad++ ,và Search từ “request_access” bạn sẽ thấy nó nằm ở dòng 109.

   case     'request_access'    :       error_reporting    (    0    )    ;     try   {     $token     =     $oauth    ->     getBearerToken    (    )    ;     $data     =     $oauth    ->     verifyAccessToken    (    $token    )    ;       // GET THE USER ID FROM THE TOKEN AND NOT THE REQUESTING PARTY     $user_id     =     $data    [    'user_t send sensitive info accross the wire.     unset    (    $info    ->     user_pass    )    ;     unset    (    $info    ->     user_activation_key    )    ;       header    (    'Cache-Control: no-cache, must-revalidate'    )    ;     header    (    'Content-type: application/json'    )    ;     print_r    (    json_encode    (    $info    )    )    ;       }   catch   (  OAuth2ServerException   $oauthError    )     {     $oauthError    ->     sendHttpResponse    (    )    ;     }       break    ;   

Học theo cấu trúc này bạn cũng có thể ra một số api khác cho website wordpress của bạn, tỷ dụ: api tạo post/page, api xóa post/page, api tạo comment cho post…

Chúc bạn thành công.

Nếu bạn thích bài viết này, hãy ủng hộ chúng tôi bằng phương pháp đăng ký nhận bài viết mới ở bên dưới và đừng quên chia sẻ kiến thức này với bạn bè của bạn nhé. Bạn cũng cũng có thể theo dõi blog này trên Twitter và Facebook

Bài viết Tạo oauth trong wordpress site [wordpress.org] được tổng hợp và biên tập bởi: dinhthuanit.com. Mọi ý kiến đóng góp và phản hồi vui lòng gửi Liên Hệ cho dinhthuanit.com để điều chỉnh. dinhthuanit.com xin cảm ơn.

Bài Viết Liên Quan


Bài Viết Khác


Quảng cáo
Ads_ngang