Hướng dẫn rest api php with authentication - phần còn lại api php với xác thực

Giới thiệu

Ở đây trong hướng dẫn này, Xác thực API PHP REST bằng JWT, bạn sẽ thấy cách sử dụng JWT (mã thông báo JSON Web) để ủy quyền cho người dùng và cho phép họ tiếp tục các tác phẩm của mình sau khi họ đăng nhập bằng thông tin đăng nhập thông thường (tên người dùng và mật khẩu). Người dùng sử dụng thông tin đăng nhập của họ để có được JWTS và tiếp tục công việc của họ cho đến khi JWTS hết hạn. Trong ví dụ này, tôi sẽ không sử dụng bất kỳ thư viện bên thứ ba nào để tạo JWT.

Bạn có thể đã thấy cách tạo và xác nhận JWT bằng ngôn ngữ PHP mà không cần sử dụng bất kỳ thư viện bên thứ ba nào. Ở đây tôi sẽ sử dụng cùng một khái niệm để tạo JWT cho từng người dùng và cho phép anh ấy/cô ấy tiếp tục công việc của mình cho đến khi JWT hết hạn.

Tôi sẽ tạo API REST trong PHP cho các chức năng riêng lẻ, chẳng hạn như, để đăng nhập, tôi sẽ tạo một API REST riêng, để đăng ký tôi sẽ tìm ra API REST riêng biệt.

Hướng dẫn rest api php with authentication - phần còn lại api php với xác thực

Điều kiện tiên quyết

Php 7.3.5 - 7.4.23, Apache 2.4 (Tùy chọn), MySQL 8.0.17 - 8.0.26, khách hàng REST - Talend, Postman, Firefox, v.v.

Bảng MySQL

Tạo người dùng bảng trong máy chủ MySQL trong cơ sở dữ liệu Roytuts.user in MySQL server under roytuts database.

CREATE TABLE `user` (
  `id` int NOT NULL AUTO_INCREMENT,
  `username` varchar(45) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

Tôi chèn một hàng với dữ liệu mẫu vào cơ sở dữ liệu để kiểm tra ứng dụng ngay lập tức:

insert into user(`username`, `password`) value(‘roy’, ‘roy’);

Thư mục dự án

Nó giả định rằng bạn đã thiết lập Apache (tùy chọn, bạn có thể sử dụng máy chủ phát triển PHP tích hợp), PHP và MySQL trong hệ thống Windows.

Bây giờ tôi sẽ tạo một thư mục gốc dự án có tên là PHP-JWT-Rest-Authentication trong thư mục Apache Server HTDOCS. Tôi có thể không đề cập đến thư mục gốc dự án trong các phần tiếp theo và tôi sẽ cho rằng tôi đang nói về thư mục gốc của dự án.php-jwt-rest-authentication under the Apache server’s htdocs folder. I may not mention the project root directory in subsequent sections and I will assume that I am talking with respect to the project root directory.

Cấu hình cơ sở dữ liệu

Tạo tệp db.php cho các hoạt động cơ sở dữ liệu khác nhau, chẳng hạn như, chèn dữ liệu vào cơ sở dữ liệu MySQL, chọn dữ liệu từ cơ sở dữ liệu MySQL, v.v. Xin vui lòng không quên thay đổi thông tin xác thực cơ sở dữ liệu theo cơ sở dữ liệu của bạn.db.php file for various database operations, such as, inserting data into MySQL database, selecting data from MySQL database, etc. Please do not forget to change the database credentials as per your database.

Đăng ký người dùng

Để có quyền truy cập vào hệ thống, trước tiên người dùng phải đăng ký chính mình bằng cách tạo tên người dùng và mật khẩu. Ứng dụng thực sự sẽ thu thập được nhiều dữ liệu hơn về người dùng nhưng để đơn giản, tôi đang ghi lại ít thông tin.

Tôi đã không sử dụng bất kỳ công nghệ mã hóa và lưu trữ mật khẩu như một văn bản đơn giản nhưng lý tưởng nhất là bạn không bao giờ nên làm điều này cho ứng dụng thực của bạn.

API REST dưới đây cho phép mọi nguồn gốc chỉ có thể truy cập được cho bài đăng phương thức HTTP. Tham số JSON sẽ được sử dụng trong thân yêu cầu để tạo tài nguyên mới, tức là, để đăng ký người dùng mới.

Tôi sẽ tạo một tệp PHP có tên đăng ký.php với mã sau:register.php with the following code:

username) . "', '" . mysqli_real_escape_string($dbConn, $data->password) . "')";
	
	$result = dbQuery($sql);
	
	if($result) {
		echo json_encode(array('success' => 'You registered successfully'));
	} else {
		echo json_encode(array('error' => 'Something went wrong, please contact administrator'));
	}
}

//End of file

Trong PHP, tôi đã truy xuất tham số cơ thể JSON bằng mã sau.

file_get_contents("php://input", true)

Cuối cùng, tôi đã giải mã các tham số JSON để truy cập như một đối tượng bằng cách sử dụng hàm

insert into user(`username`, `password`) value(‘roy’, ‘roy’);
1.

Dưới đây là một ví dụ về cách đăng ký người dùng mới. Bạn có thể sử dụng bất kỳ máy khách REST nào để đăng ký hoặc tạo người dùng mới.

Http Method - POST
URL - http://localhost/php-jwt-rest-authentication/register.php
Request Body - {"username":"roy", "password":"roy"}
Header - Content-Type:application/json
Response - {"success":"You registered successfully"}

Đăng nhập người dùng

Người dùng đã đăng ký sẽ có thể đăng nhập vào ứng dụng và sẽ nhận được JWT được tạo. Sau đó, JWT được tạo này sẽ được sử dụng để truy cập API REST được chỉ định qua giao thức HTTP.

JWT chỉ có giá trị trong 60 giây hoặc 1 phút, vui lòng thay đổi để phù hợp với yêu cầu của bạn.

Tạo tệp đăng nhập.php với mã nguồn sau:login.php with the following source code:

username) . "' AND password = '" . mysqli_real_escape_string($dbConn, $data->password) . "' LIMIT 1";
	
	$result = dbQuery($sql);
	
	if(dbNumRows($result) < 1) {
		echo json_encode(array('error' => 'Invalid User'));
	} else {
		$row = dbFetchAssoc($result);
		
		$username = $row['username'];
		
		$headers = array('alg'=>'HS256','typ'=>'JWT');
		$payload = array('username'=>$username, 'exp'=>(time() + 60));

		$jwt = generate_jwt($headers, $payload);
		
		echo json_encode(array('token' => $jwt));
	}
}

//End of file

Dưới đây là một ví dụ về cách đăng nhập và nhận JWT được tạo:

Http Method - POST
URL - http://localhost/php-jwt-rest-authentication/login.php
Request Body - {"username":"roy", "password":"roy"}
Header - Content-Type:application/json
Response - {"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InJveSIsImV4cCI6MTU4MjYyMDY1OX0.EMTwnke-M5PXV3LEEUveZLcvvi7pQmGUbWMAj2KeR94"}

Truy cập API REST

Bây giờ tôi sẽ sử dụng JWT được tạo để truy cập API REST liệt kê tất cả người dùng từ bảng cơ sở dữ liệu MySQL cho người dùng có JWT hợp lệ.

Tôi chấp nhận phương thức HTTP GET và cho phép truy cập vào bất kỳ ai.

Tạo tệp user.php với mã nguồn sau:users.php with the following source code:

 'Access denied'));
}

//End of file

Dưới đây là một ví dụ về cách truy cập API REST:

Http Method - GET
URL - http://localhost/php-jwt-rest-authentication/users.php
Request Body - {"username":"roy", "password":"roy"}
Header - Authorization:Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InJveSIsImV4cCI6MTU4MjYyMDY1OX0.EMTwnke-M5PXV3LEEUveZLcvvi7pQmGUbWMAj2KeR94
Response - [{"id":"1","username":"roy","password":"roy"},{"id":"2","username":"soumitra","password":"roy"}]

Trong phản hồi trên, bạn thấy hai người dùng vì tôi đã đăng ký hai người dùng nhưng tôi chỉ hiển thị một người dùng trong quá trình đăng ký.

Thế hệ và xác thực JWT

Tập lệnh PHP dưới đây xác định các chức năng cần thiết để tạo, xác nhận JWT và trích xuất mã thông báo của người mang từ tiêu đề ủy quyền của yêu cầu HTTP.

insert into user(`username`, `password`) value(‘roy’, ‘roy’);
0

Trong đoạn mã trên, các chức năng quan trọng nhất là

insert into user(`username`, `password`) value(‘roy’, ‘roy’);
2 và
insert into user(`username`, `password`) value(‘roy’, ‘roy’);
3. Các chức năng này được sử dụng để lấy mã thông báo mang theo yêu cầu từ tiêu đề ủy quyền.

Bắt đầu máy chủ phát triển

Bây giờ để khởi động máy chủ phát triển, điều hướng đến thư mục gốc của dự án của bạn từ công cụ dòng lệnh và thực hiện lệnh: & nbsp; ________ 14.

Máy chủ phát triển của bạn sẽ bắt đầu và nghe Port & NBSP; 8000.8000.

Kiểm tra xác thực JWT

Sử dụng các chi tiết sau đây là Highlighed trong ảnh chụp màn hình để tạo JWT bằng công cụ khách hàng REST:

Hướng dẫn rest api php with authentication - phần còn lại api php với xác thực

Sử dụng mã thông báo JWT được tạo ở trên trong tiêu đề HTTP trong khóa ủy quyền với các giá trị là người mang.Authorization key with the values as Bearer .

Hướng dẫn rest api php with authentication - phần còn lại api php với xác thực

Mã nguồn

Tải xuống