Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • HTTP Authentication

    🔥 Bí kíp xử lý xác thực API trong tự động hóa mạng: Token vs Session – Bạn chọn phe nào? 🔐

    Trong thời đại DevNet/NetDevOps lên ngôi, việc tương tác với API của các hệ thống như Cisco DNA Center hay Cisco ACI là chuyện hằng ngày ở huyện. Nhưng nếu không nắm rõ cách “xác thực” (authentication) đúng chuẩn, bạn sẽ vấp ngã đau đớn ngay từ cú request đầu tiên. 😬

    Trong bài này, mình chia sẻ hai phương pháp xác thực Token-BasedSession-Based, cực kỳ phổ biến khi làm việc với các controller như Cisco DNA Center và APIC (ACI). Và quan trọng là: có ví dụ Python cụ thể để anh em copy-paste làm lab ngay!
    🧩 Token-Based Authentication – Dành cho DNA Center
    Ý tưởng chính: Gửi thông tin username/password → Nhận lại Token → Dùng Token cho các API call tiếp theo.

    🔧 Các bước thực hiện:
    1. Chuẩn bị biến Python

    import requests DNA_URL = "https://sandboxdnac.cisco.com" HEADERS = {"content-type":"application/json"} USER = "devnetuser" PASS = "Cisco123!" AUTH = (USER, PASS) LOGIN_URL = DNA_URL + "/api/system/v1/auth/token"
    1. Gửi POST request để nhận Token

    result = requests.post(url=LOGIN_URL, auth=AUTH, headers=HEADERS, verify=False)
    1. Trích xuất Token từ response JSON

    TOKEN = result.json()['Token'] HEADERS['X-Auth-Token'] = TOKEN
    1. Thực hiện các API Call
    INVENTORY_URL = DNA_URL +"/dna/intent/api/v1/network-device" response = requests.get(url=INVENTORY_URL, headers=HEADERS, verify=False)



    ✅ Nếu response.ok == True là bạn đã thành công lấy được thông tin thiết bị trong hệ thống!
    🍪 Session-Based Authentication – Dành cho APIC (ACI)
    Ý tưởng chính: Gửi thông tin đăng nhập để nhận cookie phiên → Tự động gắn cookie cho các request tiếp theo.

    🔧 Các bước thực hiện:
    1. Tạo Session và định nghĩa login body
    import requests session = requests.Session() APIC_URL = "https://sandboxapicdc.cisco.com" USER = "admin" PASS = "ciscopsdt" AUTH_BODY = { "aaaUser": { "attributes": {"name": USER, "pwd": PASS} } } LOGIN_URL = APIC_URL + "/api/aaaLogin.json"
    1. Gửi POST để đăng nhập và nhận cookie
    response = session.post(url=LOGIN_URL, json=AUTH_BODY, verify=False)
    1. Kiểm tra cookie tồn tại
    print(response.cookies)
    1. Gửi API Call với Session đã đăng nhập
    TENANT_URL = APIC_URL + "/api/node/class/fvTenant.json" response = session.get(url=TENANT_URL, verify=False) print(response.json())



    ✅ Chỉ cần session.get() là tự động mang cookie, không cần manually truyền token vào headers!
    🎯 Tổng kết nhanh
    Dùng ở đâu? Cisco DNA Center Cisco APIC (ACI)
    Gửi gì trước? Username/Password (POST) → Token Username/Password (POST) → Session Cookie
    Cần truyền gì sau đó? X-Auth-Token trong header Session tự gắn cookie
    Hết hạn thì sao? Gửi lại để lấy token mới Gửi lại để lấy cookie mới


    💬 Câu hỏi nhanh kiểm tra kiến thức
    ❓ Lớp nào dùng để quản lý session authentication?

    Session()
    ❓ Username và password cần định dạng thế nào trước khi mã hóa Base64?

    "username:password"
    🧠 Kết luận


    Không phải API nào cũng xác thực giống nhau. Có API yêu cầu Token kiểu Bearer, có API cần Cookie phiên, có API chơi luôn cả 2 😅. Vậy nên, luôn đọc kỹ tài liệu API của controller bạn đang làm việc, và viết hàm Python chuẩn xác.

    📌 Trong các bài lab DevNet hay tự động hóa mạng, hãy dành thời gian làm thật kỹ phần xác thực API – vì nếu bước này sai, tất cả các bước tiếp theo… vô nghĩa.

    📥 Nếu bạn thấy bài viết hữu ích cho DevOps / NetDev / Automation Engineer, hãy để lại bình luận hoặc chia sẻ để lan tỏa kiến thức đúng đến cộng đồng!

    vnpro #NetDevOps #CiscoDNA #CiscoACI #TokenAuth #SessionAuth #APIautomation devnet #NetworkAutomation #PythonRequests
    Attached Files
    Đặng Quang Minh, CCIE#11897 (Enterprise Infrastructure, Wireless, Automation, AI), CCSI#31417

    Email : dangquangminh@vnpro.org
    https://www.facebook.com/groups/vietprofessional/
Working...
X