This page is READ-ONLY. It is generated from the old site.
All timestamps are relative to 2013 (when this page is generated).
If you are looking for TeX support, please go to VietTUG.org

basic authentication: how it works

híc híc híc
Added by over 2 years ago  »  Votes: 1/1

Basic authentication là một kiểu xác thực người dùng "đơn giản", xét từ phía triển khai lẫn sử dụng; nó được hỗ trợ bởi hầu hết các trình duyệt, kể cả curl, wget.

Cơ chế của basic authentication được mô tả kỹ ở phần ví dụ ở http://en.wikipedia.org/wiki/Basic_access_authentication. Đại ý là,

  1. Khi người dùng lần đầu tiên truy cập một trang web có bảo vệ, họ sẽ nhận được mã trả về 401 (HTTP/1.0 401 Authorization Required);
  2. Trình duyệt sau đó sẽ yêu cầu người dùng nhập vào username và chìa khóa; những thông tin đó sẽ được mã hóa base64 để chuyển đến server;
  3. Sau khi được xác thực, trình duyệt sẽ ghi nhớ thông tin cho đến khi trình duyệt bị đóng hoặc các thông tin mà trình duyệt lưu trữ (history) được xóa chủ động (xem chẳng hạn ở http://www.tolaris.com/2009/09/08/logging-out-of-http-auth-with-firefox/).

Ý tưởng "ghi nhớ" dẫn tới hệ quả là bạn không thể truy cập các thư mục con sử dụng các thông tin xác thực khác nhau: chẳng hạn, nếu có hai thư mục secure1secure2 như dưới đây và chúng sử dụng các username hoặc chìa khóa khác nhau để xác thực, thì khi chuyển từ thư mục này sang thư mục khác, bạn sẽ phải gõ lại thông tin xác thực, ngoài ra kết nối với thư mục cũ bị mất.

http://example.net/secure1
http://example.net/secure2

Điều này thật vô cùng bất tiện :) Mình vẫn chưa tìm ra cách giải quyết ngoài cách sử dụng proxy :P

Ta nói kỹ hơn một tí về bước thứ 2 ở trên: trình duyệt đã gửi thông tin gì lên server? Giả sử bạn sử dụng usenamefoobar và chìa khóa secret_password để xác thực, thì thông tin gửi lên trong phần header của kết nối là

1 GET /secure1
2 Host: examplenet:80
3 User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.9.2.4) Gecko/20100627 Firefox/3.6.4
4 Authorization: Basic Zm9vYmFyOnNlY3JldF9wYXNzd29yZAo=
5 Cache-Control: max-age=0

Dòng quan trọng nhất là dòng thứ 4 ở trên. Chuỗi Zm9vYmFyOnNlY3JldF9wYXNzd29yZAo= chẳng có gì lạ lẫm, đó là kết quả mã hóa base64 của chuỗi foobar:secret_password được ghép bởi username và chìa khóa đã dùng.

Như vậy, để lập trình tự động với curl hoặc wget chẳng hạn, chỉ cần bổ sung thêm phần Header

curl -H "Authorization: Basic Zm9vYmFyOnNlY3JldF9wYXNzd29yZAo=" http://example.net/secure1

Khỏe re :)

Lưu ý quan trọng cuối cùng là: một tay phá bĩnh đứng giữa máy tính của bạn và máy phục vụ web, có thể lấy được chìa khóa của bạn, nếu kết nối không được bảo vệ. Đó là vì basic authentication đã sử dụng cơ chế mã hóa hai chiều...


Comments