Làm cách nào để xác thực REST api trong PHP?

Nếu bạn ở đây vì bạn muốn kết nối mã php của mình với một API bên ngoài, trước tiên vui lòng kiểm tra các cuộc gọi api cURL của tôi với hướng dẫn về php. Đây là phần 2 về cách kết nối với API bằng cURL trong php, vì tôi đã nhận được rất nhiều câu hỏi về cách kết nối nếu API yêu cầu xác thực (utoken) trước

Đứng lên. Lần này, tôi sẽ sử dụng Javascript để linh hoạt hơn. Vì tôi cần thực hiện cuộc gọi api 'xác thực' trước cuộc gọi GET ban đầu của chúng tôi. Do đó, tôi tạo các lệnh gọi API của mình trong các tệp php của riêng mình ở bên cạnh và sẽ nhắm mục tiêu các tệp này bằng cách sử dụng ES6 async/fetch từ trong trang của tôi. Nếu bạn thấy tôi liên kết đến my-site. com, điều này có nghĩa là tôi đã tự tạo tệp trên máy chủ của mình. Nếu tôi đang liên kết đến api-site. com, điều này có nghĩa là tôi đang gọi API bên ngoài

Làm cách nào để xác thực REST api trong PHP?

Tạo khóa xác thực

Một số API chỉ cho phép yêu cầu POST hoặc GET nếu bạn sử dụng auth-token. Trước tiên, chúng tôi cần tạo mã thông báo xác thực này trước khi chúng tôi được phép thực hiện lệnh gọi API. Thông thường, các tài liệu API sẽ giải thích cách bạn có thể tạo mã xác thực của chúng. Trong ví dụ của tôi, tôi có thể tạo mã thông báo xác thực bằng cách đăng ID ứng dụng khách API, client_secret và loại đăng nhập vào tệp Xác thực API của họ

Đây là cách tôi có thể tạo và sử dụng mã thông báo xác thực của mình, dựa trên tập lệnh cURL trong hướng dẫn phần 1 của tôi. Trong hướng dẫn này, tôi sẽ gọi tệp này là api/auth. php

$curl = curl_init();
$auth_data = array(
	'client_id' 		=> 'XBnKaywRCrj05mM-XXX-6DXuZ3FFkUgiw45',
	'client_secret' 	=> 'btHTWVNMUATHEnF-XXX-2nQabKcKVo3VXtU',
	'grant_type' 		=> 'client_credentials'
);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $auth_data);
curl_setopt($curl, CURLOPT_URL, 'https://api-site.com/oauth/token');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
$result = curl_exec($curl);
if(!$result){die("Connection Failure");}
curl_close($curl);
echo $result;

Điều này sẽ trả lại một auth-token cho tôi. Với mã thông báo xác thực này, tôi có thể bắt đầu thực hiện các lệnh gọi API bình thường như POST và GET. Tuy nhiên. API ví dụ của tôi chỉ giữ cho mã thông báo xác thực của tôi tồn tại trong 2 tuần VÀ sẽ chỉ cho phép 3 mã thông báo xác thực cùng một lúc. Vì vậy, đối với mỗi cuộc gọi tôi thực hiện, tôi cần tạo lại cuộc gọi này. Đây là lý do tại sao tôi sử dụng JS làm ví dụ, vì vậy chúng tôi có thể dễ dàng nhanh chóng tạo mã thông báo AUTH trước lệnh gọi của chính chúng tôi. Đối với điều này, tôi có một hàm JS riêng để đăng lên api/auth của riêng chúng tôi. php. JS

const apiAuth = async () => {
  try{
    const response  = await fetch('https://my-site.com/api/auth.php');
    if(response.ok){
      return response.json();
    }
    throw new Error(`apiAuth_response: ${response}`);
  }catch(error){
    console.error(`apiAuth: ${error}`);
  }
}

Đây là tập lệnh JS và tập lệnh PHP mà tôi đang sử dụng để tạo mã thông báo xác thực cho API của mình. Tôi đang sử dụng await để đảm bảo rằng tập lệnh của chúng tôi chỉ liên tục khi chúng tôi đã nhận được mã xác thực. Nếu chúng tôi không chờ mã thông báo này, thì có thể phần còn lại của tập lệnh của chúng tôi sẽ cố thực hiện lệnh gọi API mà không có mã thông báo và sẽ trả về lỗi

Làm cách nào để sử dụng Auth-token của chúng tôi?

Được rồi, bây giờ chúng tôi có mã thông báo xác thực cho ứng dụng của mình… Chúng tôi sử dụng cái này như thế nào?

yêu cầu NHẬN cURL (có Xác thực)

Trong hầu hết các trường hợp (tôi nghĩ) bạn cần thêm mã thông báo xác thực của mình vào url bạn đang sử dụng để thực hiện lệnh gọi API hợp lệ. Một lần nữa, bạn sẽ có thể tìm thấy điều này trong tài liệu về API mà bạn đang sử dụng. Trong ví dụ của tôi, nếu tôi muốn thực hiện lệnh gọi API, liên kết của tôi sẽ trông như thế này. api/get_all_reviews. php

https://api-site.com/v1/apps/' . $app_key . '/reviews?utoken=' . $utoken;

Chúng tôi biết $app_key của mình và chúng tôi vừa tạo $utoken của mình. Nên chung tôi. php để thực hiện cuộc gọi GET sẽ như thế này. ($_POST[‘auth_token’] sẽ là utoken nhận được từ chức năng trước đó của chúng tôi

if(isset($_POST['access_token'])){	
	$app_key  = 'XBnKaywRCrj05m-XXX-v6DXuZ3FFkUgiw45';
	$utoken = $_POST['access_token'];
	$url = 'https://api-site.com/v1/apps/' . $app_key . '/reviews?utoken=' . $utoken;
	
	$curl = curl_init();
   curl_setopt($curl, CURLOPT_URL, $url);
   curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
   $result = curl_exec($curl);
   if(!$result){die("Connection Failure");}
   curl_close($curl);
   echo $result;
}

Điều này sẽ trả về tất cả các bài đánh giá sản phẩm của chúng tôi trong ví dụ mà tôi đã chọn cho hướng dẫn này. Bây giờ chúng ta vẫn cần nhắm mục tiêu tệp GET php này bằng JS của mình và đừng quên tạo utoken trước. JS

const getAllReviews = async () => {
  const auth = await apiAuth();
  const data = {
    access_token: auth.access_token,
    token_type: auth.token_type,
  }
  try{
    $.post({
      type: 'POST',
      url: 'http://my-site.com/api/get_all_reviews.php',
      data: data
    })
    .success(res => {
      const data = JSON.parse(res);
      const reviews = data.reviews;
      displayAllReviews(reviews, $('.review-list'));
    });
  }catch(error){
    console.error(`getAllReviews: ${error}`);
  }
}

Như bạn có thể thấy, chúng tôi đang chờ chức năng Xác thực lại, trước khi tiếp tục với lệnh gọi API ban đầu của mình. Chúng tôi gửi auth nhận được. access_token cùng với dữ liệu biểu mẫu của chúng tôi vào tập lệnh GET php của chúng tôi. displayAllReviews() là một chức năng ngẫu nhiên, tôi đang chuyển dữ liệu nhận được của mình tới. Vì vậy, ở đây bạn có thể gọi các chức năng của riêng mình, tùy thuộc vào những gì bạn muốn làm với dữ liệu này

Yêu cầu POST của cURL (có Xác thực)

Tương tự với POST cũng như với GET, chúng tôi cần thêm mã thông báo của bạn (Auth-token) vào url. Đây là một ví dụ về liên kết POST của tôi tới API, với utoken của tôi. api/post_review. php

if(isset($_POST['success'])){	
	$p_url = 'https://product-link.com';
	$email = $_POST['email'];
	
	$post_array = array(
		'appkey' => 'XBnKaywRCrj05m-XXX-v6DXuZ3FFkUgiw45',
		'domain' => 'https://api-site.com',
		'product_url' => $p_url,
		'email' => $email,
		'review_content' => $_POST['message'],
		'review_title' => $_POST['title'],
		'review_score' => $_POST['star_rating_value']
	);
	postReview($post_array);
}else{
	$response = array(
		'response' 	=> 'error',
		'message'	=> 'POST is required to use this function'
	);
}
function postReview($post_array){
	$curl = curl_init();
	curl_setopt($curl, CURLOPT_POST, 1);
	curl_setopt($curl, CURLOPT_POSTFIELDS, $post_array);
	curl_setopt($curl, CURLOPT_URL, 'https://api-site.com/v1/reviews');
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
	
	$result = curl_exec($curl);
	if(!$result){die("Connection Failure");}
	curl_close($curl);
	echo $result;
}

Để tạo POST, trước tiên tôi thu thập tất cả thông tin tôi cần để tạo bài đăng. (như email người dùng và URL sản phẩm mà tôi muốn đăng bài đánh giá). Khi tôi có tất cả dữ liệu, tôi gọi hàm postReview, hàm này sẽ thực hiện cuộc gọi API POST. Chúng tôi cần thu thập trước tất cả dữ liệu này, nếu không, chúng tôi không được phép thực hiện lệnh gọi API của mình. Vì yêu cầu POST của chúng tôi không yêu cầu biến utoken

Bây giờ tập lệnh JS tôi đã sử dụng cho việc này. JS

function postSiteReview(data, form){
  $.ajax({
    url: 'https://my-site.com/api/post_review.php',
    type: 'post',
    data: data,
    success: function(result){
      let res = JSON.parse(result);
      let message = '';
      if(res.code === 200){
        form.find('.success-message').fadeIn();
      }else{
        if(res.response === 'error'){
          message = res.message;
        }
        if(res.status && res.status.code === 500){
          message = res.status.message;
        }
        $('p.error-msg').text(`Uh ooh. ${message}`);
      }
    },
    error: function(err){
      console.log('$.ajax error: ' + err);
    }
  });
}

Không có tiêu đề Kiểm soát truy cập-Cho phép-Xuất xứ – (CORS)

Nếu bạn đang thực hiện lệnh gọi JS tới các tệp php của riêng mình, nhưng các tệp của bạn nằm trên một máy chủ khác, vui lòng ở dòng sau ở đầu mỗi tệp. tập tin php bạn đang sử dụng

header("Access-Control-Allow-Origin: https://my-site.com");

Điều này sẽ khắc phục lỗi kiểm soát truy cập mà bạn thấy trong bảng điều khiển js

Tôi thực sự hy vọng phần này cũng được giải thích rõ ràng. Nếu không, xin vui lòng hỏi trong các ý kiến. (Tôi không thể đảm bảo bạn sẽ nhận được phản hồi)

Hãy cho tôi biết nếu nó làm việc cho bạn
Mã hóa vui vẻ

  • Chia sẻ trực tuyến

Nhận các bài đăng mới nhất và những thứ khác trong hộp thư đến của bạn

Nhận các bài báo hay nhất của chúng tôi ngay trong hộp thư đến của bạn. Chỉ một lần mỗi quý, bởi vì không ai thích thư rác

Đặt mua

Làm cách nào để xác thực REST api trong PHP?

Cảm ơn

Cảm ơn bạn đã đăng ký. Tin nhắn cảm ơn của chúng tôi đã sẵn sàng cho bạn

Đọc thêm các chủ đề liên quan?

  • Các lệnh gọi API cURL với dữ liệu PHP, REST và JSON (NHẬN POST PUT DELETE) Đọc bài viết

  • Ajax tải thêm bài đăng từ các loại bài đăng tùy chỉnh trong WordPress Đọc bài viết

Để lại một câu trả lời

Địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu *

Nhận xét *

Tên *

Email *

Trang mạng

Δ

10 Bình luận

  • Darla nói.

    Hi weichie,

    Tôi gặp khó khăn khi gọi API bên ngoài bằng cURL và php. Tôi có bí mật ứng dụng khách và id ứng dụng khách cũng như URL gọi lại nhưng tôi không thể lấy email người dùng hoặc id người dùng. Bạn có thể giúp tôi với điều này?

  • Abdul nói.

    tôi thực sự đánh giá cao những nỗ lực của bạn để giải thích khái niệm này một cách ngắn gọn
    tất cả các phần khác của hướng dẫn này hoạt động trơn tru như mong đợi
    Tuy nhiên, tôi không hoàn toàn hiểu được việc triển khai javascript
    đối với chức năng này, chức năng postSiteReview (dữ liệu, biểu mẫu) vui lòng giải thích ý nghĩa của các tham số về cách gọi nó

  • tan nói.

    tôi có thể gửi email cho bạn không. tôi cần xác minh điều gì đó trên dữ liệu của mình
    bạn có thể trả lời trong email của tôi cung cấp

    • Bob Weichler nói.

      Bạn luôn có thể liên hệ với tôi thông qua trang liên hệ. Xin lưu ý rằng tôi không thể cung cấp hỗ trợ trực tiếp cho mọi yêu cầu, nhưng bạn luôn có thể thử cơ hội của mình

  • Ajay Babu nói.

    Xin chào,
    trước hết cảm ơn rất nhiều cho bài viết này
    Ở đây cả $app_key và client_id đều giống nhau?
    $auth_data = mảng(
    'client_id' => 'XBnKaywRCrj05mM-XXX-6DXuZ3FFkUgiw45',
    ‘client_secret’ => ‘btHTWVNMUATHEnF-XXX-2nQabKcKVo3VXtU’,
    'grant_type' => 'client_credentials'
    );
    ở đây client_credentials có nghĩa là tên người dùng và mật khẩu sẽ được cung cấp bởi nhà cung cấp api?

  • Joshua Rigney nói.

    $_POST đến từ đâu?

    • Joshua Rigney nói.

      Ồ, tôi thấy $_POST trong tài liệu PHP. Tôi đoán tôi không sử dụng nó đúng cách, mặc dù. Nó dường như không làm việc cho tôi. Tôi đoán [‘access_token’] là một điểm cuối dành riêng cho API của bạn

  • Chris nói.

    Làm thế nào để bạn xác thực khi gọi https. // trang web của tôi. com/api/auth. php?

    • Bob Weichler nói.

      Bất kỳ ai cũng có thể gọi url, nhưng chỉ khi bạn đăng đúng dữ liệu người dùng, bạn mới nhận được mã thông báo xác thực hợp lệ. Nếu không, nó sẽ trả về một lỗi như 'thông tin xác thực người dùng không hợp lệ' hoặc một cái gì đó

      Làm cách nào để sử dụng xác thực trong API PHP?

      Người dùng phải xác thực bằng Auth0 để tạo mã ủy quyền. Điều này được thực hiện bằng cách chuyển hướng đến điểm cuối `/authorize` cho miền đối tượng thuê của bạn . Đoạn mã sau sẽ xuất hiện trên trang yêu cầu xác thực. // 👆 Chúng tôi đang tiếp tục từ hướng dẫn "bắt đầu" được liên kết trong "Điều kiện tiên quyết" ở trên.

      Các cách để xác thực bằng API REST là gì?

      Có nhiều phương pháp xác thực khác nhau cho API REST, từ thông tin xác thực cơ bản và mã hóa mã thông báo đến kiểm soát truy cập nhiều lớp và xác thực quyền phức tạp. .
      xác thực cơ bản. .
      khóa API. .
      mã hóa HMAC. .
      OAuth 2. 0. .
      Kết nối OpenID. .
      Chọn phương pháp xác thực API REST

      Cách sử dụng OAuth 2. 0 cho lệnh gọi API REST trong PHP?

      Sử dụng OAuth 2. 0 cho Ứng dụng máy chủ web .
      Bước 1. Đặt tham số ủy quyền
      Bước 2. Chuyển hướng đến OAuth 2 của Google. 0 máy chủ
      Bước 3. Google nhắc người dùng đồng ý
      Bước 4. Xử lý OAuth 2. 0 phản hồi của máy chủ
      Bước 5. Trao đổi mã ủy quyền để làm mới và truy cập mã thông báo

      Làm cách nào để tạo xác thực trong PHP?

      Các bước tạo hệ thống xác thực đăng nhập người dùng trong PHP .
      Tạo cơ sở dữ liệu MySQL với bảng người dùng
      Tạo bảng đăng nhập người dùng để gửi chi tiết đăng nhập tới PHP
      Tạo truy vấn để so sánh chi tiết đăng nhập của người dùng với cơ sở dữ liệu người dùng MySQL