🔥 Bạn có đang “mở toang cánh cửa” API mà không biết?
Trong bài viết này, chúng ta sẽ đào sâu vào HTTP Authentication – một lớp bảo vệ cực kỳ quan trọng nhưng thường bị xem nhẹ khi triển khai RESTful API cho hệ thống tự động hoá mạng, SDN controller hoặc bất kỳ nền tảng nào có mở API công khai.
🔐 3 CƠ CHẾ XÁC THỰC HTTP MÀ KỸ SƯ TỰ ĐỘNG HOÁ PHẢI BIẾT
Khi bạn triển khai các RESTful API, điều quan trọng không chỉ là “trả về đúng dữ liệu”, mà còn là ngăn chặn truy cập trái phép. Có 3 hình thức xác thực HTTP phổ biến:
1. Basic Authentication
👉 Dễ triển khai, nhưng thiếu bảo mật.
Thông tin đăng nhập (username:password) được mã hoá bằng Base64, sau đó được gửi trong header HTTP như sau:
Authorization: Basic Q2lzY286Q2lzY28=
Trong Python, bạn có thể tạo đoạn mã như sau:
import base64 username = "Cisco" password = "Cisco" message = f"{username}:{password}" encoded = base64.b64encode(message.encode()).decode() headers = { "Authorization": f"Basic {encoded}" }
🛑 Rủi ro: Base64 không phải là mã hoá, chỉ là mã hóa đơn giản, dễ bị giải mã nếu bị sniffed trên đường truyền không mã hoá (HTTP thường).
2. Session-Based Authentication
👉 Một lựa chọn phổ biến cho các hệ thống web truyền thống.
Sau khi đăng nhập thành công, server tạo một session cookie, lưu trên trình duyệt hoặc client:
Set-Cookie: sessionid=xyz12345abc; HttpOnly
Session này sẽ được dùng cho các request tiếp theo. Tuy nhiên:
3. Token-Based Authentication
👉 Phương pháp hiện đại và linh hoạt nhất.
Client thực hiện login một lần để nhận token. Sau đó, các request sau gửi token này trong header:
Authorization: Bearer eyJhbGciOi...
Token có thể là dạng JWT hoặc định dạng custom, có thể chứa:
✅ Stateless (không cần giữ session trên server)
✅ Tăng cường bảo mật với expiry time, revocation list
✅ Dễ tích hợp với OAuth2, SSO, API Gateway như Apigee, Kong
🔄 So sánh nhanh:
💡 DevNet Tip:
Trong môi trường network automation, đặc biệt khi làm việc với Cisco DNA Center, ACI, NSO, token-based authentication là hình thức được khuyến nghị vì có thể tích hợp tốt với Python scripts, Postman, Ansible, Terraform và CI/CD pipeline.
📌 Ví dụ thực tế:
Khi bạn dùng Postman để tương tác với API Cisco DNA Center, bạn thường phải:
👨💻 Tóm lại cho anh em DevOps/Automation:
📚 Đây là phần 1 trong chuỗi bài “Giải mã API trong Network Automation” dành cho cộng đồng VnPro DevOps/NetDev.
👉 Hãy theo dõi để xem phần tiếp theo: "Token-Based Authentication với Python, Postman và Cisco API thực tế."
Bạn đã dùng token-based auth trong dự án nào chưa? Chia sẻ cùng anh em nhé! 👇
Trong bài viết này, chúng ta sẽ đào sâu vào HTTP Authentication – một lớp bảo vệ cực kỳ quan trọng nhưng thường bị xem nhẹ khi triển khai RESTful API cho hệ thống tự động hoá mạng, SDN controller hoặc bất kỳ nền tảng nào có mở API công khai.
🔐 3 CƠ CHẾ XÁC THỰC HTTP MÀ KỸ SƯ TỰ ĐỘNG HOÁ PHẢI BIẾT
Khi bạn triển khai các RESTful API, điều quan trọng không chỉ là “trả về đúng dữ liệu”, mà còn là ngăn chặn truy cập trái phép. Có 3 hình thức xác thực HTTP phổ biến:
1. Basic Authentication
👉 Dễ triển khai, nhưng thiếu bảo mật.
Thông tin đăng nhập (username:password) được mã hoá bằng Base64, sau đó được gửi trong header HTTP như sau:
Authorization: Basic Q2lzY286Q2lzY28=
Trong Python, bạn có thể tạo đoạn mã như sau:
import base64 username = "Cisco" password = "Cisco" message = f"{username}:{password}" encoded = base64.b64encode(message.encode()).decode() headers = { "Authorization": f"Basic {encoded}" }
🛑 Rủi ro: Base64 không phải là mã hoá, chỉ là mã hóa đơn giản, dễ bị giải mã nếu bị sniffed trên đường truyền không mã hoá (HTTP thường).
2. Session-Based Authentication
👉 Một lựa chọn phổ biến cho các hệ thống web truyền thống.
Sau khi đăng nhập thành công, server tạo một session cookie, lưu trên trình duyệt hoặc client:
Set-Cookie: sessionid=xyz12345abc; HttpOnly
Session này sẽ được dùng cho các request tiếp theo. Tuy nhiên:
- Cookie dễ bị hijack nếu không dùng HTTPS.
- Không chia sẻ được phiên làm việc giữa các hệ thống (context-aware kém).
3. Token-Based Authentication
👉 Phương pháp hiện đại và linh hoạt nhất.
Client thực hiện login một lần để nhận token. Sau đó, các request sau gửi token này trong header:
Authorization: Bearer eyJhbGciOi...
Token có thể là dạng JWT hoặc định dạng custom, có thể chứa:
- Thời gian hết hạn
- Vai trò người dùng
- Dữ liệu liên quan đến session
✅ Stateless (không cần giữ session trên server)
✅ Tăng cường bảo mật với expiry time, revocation list
✅ Dễ tích hợp với OAuth2, SSO, API Gateway như Apigee, Kong
🔄 So sánh nhanh:
- Basic: Cấu hình nhanh, bảo mật yếu, không linh động.
- Session: Dễ triển khai với web, bảo mật phụ thuộc vào cookies.
- Token: Tối ưu cho hệ thống API hiện đại, bảo mật và dễ quản lý.
💡 DevNet Tip:
Trong môi trường network automation, đặc biệt khi làm việc với Cisco DNA Center, ACI, NSO, token-based authentication là hình thức được khuyến nghị vì có thể tích hợp tốt với Python scripts, Postman, Ansible, Terraform và CI/CD pipeline.
📌 Ví dụ thực tế:
Khi bạn dùng Postman để tương tác với API Cisco DNA Center, bạn thường phải:
- Gửi POST /auth/token để lấy token.
- Dùng token đó cho tất cả các request tiếp theo như /network-device, /site, v.v.
👨💻 Tóm lại cho anh em DevOps/Automation:
- Đừng để API của bạn “trống trơn” mà không xác thực.
- Luôn dùng HTTPS khi triển khai bất kỳ loại authentication nào.
- Ưu tiên token-based auth nếu bạn muốn phát triển hệ thống API chuẩn hóa, dễ tích hợp và an toàn.
📚 Đây là phần 1 trong chuỗi bài “Giải mã API trong Network Automation” dành cho cộng đồng VnPro DevOps/NetDev.
👉 Hãy theo dõi để xem phần tiếp theo: "Token-Based Authentication với Python, Postman và Cisco API thực tế."
Bạn đã dùng token-based auth trong dự án nào chưa? Chia sẻ cùng anh em nhé! 👇