Hướng dẫn dùng www authenticate trong PHP
Lượt truy cập: 1,131 Show Trong bài hướng dẫn này, chúng ta sẽ tìm hiểu và lập trình cơ chế xác thực Basic Authentication dựa trên kiến trúc RESTful Web Services, trong đó, yêu cầu xác thực (Request) sẽ được gửi thông qua API-URI. Công cụĐể hiện thực được bài hướng dẫn này, chúng ta cần chuẩn bị (tối thiểu) những công cụ sau:
TL;DRCác bước cấu hình môi trường lập trình, cấu hình Java Servlet, triển khai API theo kiến trúc RESTful Web Services, kiểm thử API, chúng ta có tham khảo trong video tại đây và tải về mã nguồn mẫu tại đây. Basic HTTP authentication schemeTiêu chuẩn RFC-7235 định nghĩa cơ chế xác thực dựa trên giao thức HTTP, cơ chế này cho phép phía máy chủ yêu cầu phía máy khách cung cấp các thông tin xác thực (authentication information). Một cách vắn tắt, cơ chế hoạt động như sau:
Trong phạm vi của bài viết, chúng ta sẽ xem cơ chế xác thực này (sau đây gọi tắt là Basic Auth) là một trong những giải pháp dùng để xác thực một người dùng (User/Client) khi gửi truy cập đến API, chúng ta sẽ không thảo luận nhiều về ưu-khuyết điểm của nó. Trong thực tế, bên cạnh cơ chế này, chúng ta còn có những cơ chế khác như (có thể dùng kết hợp với Basic Auth): API Key, Bearer Token, Digest Auth, OAuth 1.0, OAuth 2.0, Hawk Authentication, AWS Signature, NTLM Authentication, Akamai EdgeGrid. Xét về độ bảo mật, cơ chế Basic Auth dùng mã Base64 để mã hóa và giải mã thông tin xác thực, do vậy, thường không được đánh giá cao về độ bảo mật. Trong thực tế, nếu dùng Basic Auth, chúng ta thường kết hợp với giao thức SSL (HTTPS) để có thêm một lớp mã hóa thông tin. Xét về mặt kỹ thuật của Basic Auth, để gửi thông tin xác thực, phía máy khách cần phải “đính kèm” thông tin cần xác thực vào trường header của HTTP. Cấu trúc của Authorization header như sau:
Ví dụ, nếu username là
Có một lưu ý với Base64 trong một số ngôn ngữ lập trình, thông thường sẽ bổ sung thêm (padding) ký tự Java Service sử dụng GET với Basic AuthTrong đoạn chương trình bên dưới, chúng ta sẽ tiến hành hiện thực lớp Authentication, trong đó, bao gồm phương thức package com.soa.auth; import java.util.Base64; import javax.ws.rs.*; import javax.ws.rs.core.*; @Path("/auth") public class Authentication { @GET @Path("/v1") @Produces(MediaType.APPLICATION_JSON) public boolean auth(@HeaderParam("authorization") String authString) { // extract data before decoding String[] authParts = authString.split("\\s+"); String authInfo = authParts[1]; // decode the data back to original string byte[] bytes = null; bytes = Base64.getDecoder().decode(authInfo); String decodedAuth = new String(bytes); // extract username/password if(decodedAuth.contains(":")) { String username = decodedAuth.split(":")[0]; String password = decodedAuth.split(":")[1]; // change this line to your logic if(username.equals("admin") && password.equals("123456")) return true; } return false; } } Nếu chúng ta hiện thực
các Services trong nhiều Package khác nhau, thì thẻ Ví dụ Project có 2 Package (
Kiểm thử API bằng PostmanTrước khi kiểm thử API, chúng ta cần phải khởi động Servlet và triển khai (Deploy) dịch vụ
lên Server ( Các bước thực hiện như sau:
Đến đây, chúng ta đã lập trình và kiểm thử API đã chạy đúng với logic đặt ra. Tại bước này, chúng ta sẽ lập trình một giao diện Web (HTML & PHP) để thể hiện giao diện đăng nhập (HTML) và gửi (PHP) gói tin chứa Authentication header đến máy chủ chứa API ( Chúng ta sẽ cần hiện thực tập tin
Để thực thi được đoạn chương trình trên, chúng ta cần phải có một Web Engine trên máy tính. Bài viết này sử dụng XAMPP 5.6.40 trên hệ điều hành MacOS 10.15.3. Hình bên dưới là kết quả khi thực thi tập tin Tổng kếtTrong bài hướng dẫn này, chúng ta đã hoàn thành được những việc sau:
Tài nguyên tải về
|