Cùng tìm hiểu Cơ chế xác thực bằng OpenID Connect

Hình dung một trường hợp bạn truy cập vào một trang web và nó bắt bạn phải đăng ký một tài khoản. Bình thường bạn sẽ nhập vào một hoặc nhiều form bao gồm các thông tin user name, password, address, phone number, email, vân vân… và sau đó một email hoặc sms được gửi tới bạn. Bước tiếp theo là điền vào mã xác thực hoặc bấm vào link trong email để xác thực tài khoản vừa đăng ký. Quả nhiên phiền hà :(. Bạn thấy ngại và định dừng lại? Khoan đã, bạn nghĩ sao nếu bạn không cần tạo tài khoản mà vẫn có … tài khoản? That’s ridiculous, right? Nhưng đó là sự thật. Bạn có thể dùng tài khoản Google hay Facebook để đăng nhập vào một trang web bất kỳ! Làm sao điều này lại có thể được?

Nói nôm na thế này, tài khoản Facebook của bạn là một định danh duy nhất của bạn trên thế giới ảo internet. Bởi vì facebook cho phép các trang web hay ứng dụng khác truy cập thông tin định danh này, nó giúp các ứng dụng kia xác thực được bạn qua các thông tin trả về. Như vậy với duy nhất một tài khoản facebook bạn có thể xác thực không hạn chế các trang web hay ứng dụng mà có hỗ trợ việc đăng nhập qua facebook.

Image result for login with facebook
Một button quen thuộc, và tiện dụng thật sự

Nguyên tắc của việc login này thực ra rất đơn giản. Một người dùng cần được xác thực bằng một cách nào đó, có thể là thông qua tài khoản username/password được lưu trong hệ thống (cách làm truyền thống), hoặc được lưu trong một tổ chức uy tín nào đó (như facebook chẳng hạn). Cách thứ 2 rõ ràng mang lại lợi ích cho cả người dùng và cả trang web hay ứng dụng, người dùng không cần tạo tài khoản mới và đồng nghĩa với việc phải nhớ thông tin tài khoản này, còn trang web kia thì không cần mất công sức để quản lý tài khoản, cũng là thu hút được nhiều người đăng ký hơn.

Tất nhiên có nhiều hãng lớn đứng ra xác thực cho bạn, không riêng gì facebook.

Image result for login with facebook
Muốn tiếp tục với tài khoản Facebook, Google, hay Twitter? lựa chọn là của bạn!

Hãy quên đi những form thông tin dài ngoằng, đơn giản là click vào một button, điền user name/ password cho tài khoản định danh (facebook, google…) và voilà, bạn đã có thể dùng ngay cùng với một tài khoản mới.

Vậy cơ chế nào cho những việc như thế này? Hãy nói đến OpenID và OpenID Connect.

Trước hết lưu ý với các bạn là OpenID Connect khác với OpenID.

OpenID là một giao thức xác thực phi tập trung theo chuẩn mở cho phép hiện thực hoá những việc ở trên.

OpenID Connect là một lớp xác thực (authentication layer) trên nền tảng OAuth 2.0, một framework dùng cho việc xác thực.

OpenID Connect giúp các client kiểm tra user thông qua các authorization server, đồng thời với đó là lấy các thông tin cơ bản của user đó bằng cách gọi đến REST API. OpenID Connect dùng JSON Web Tokens (JWT) trong đó việc authentiation dựa vào các token string trao đổi qua lại giữa client và authentication server. Thông tin mà server gửi về bao gồm một Acess Token, và có thể có (nếu bạn yêu cầu) một ID token.

Lấy ví dụ khi ta đăng nhập dùng tài khoản Google:

  1. Khi bạn chọn đăng nhập dùng tài khoản Google, Authen server gửi một Authorization Request tới Google để xin được cấp quyền truy cập.
  2. Google xác thực thông tin của bạn hoặc yêu cầu bạn login nếu bạn chưa đăng nhập, và sau đó hỏi bạn việc cấp quyền, tức là các quyền truy cập như avatar, email… của bạn.
  3. Khi bạn đã chấp thuận việc đăng nhập, Google sẽ gửi một Access Token, và có thể có ID Token cho Authen server.
  4. Authen server có thể nhận thông tin người dùng từ ID Token hoặc sử dụng Access Token để truy cập tới Google API.

Trong đó:

Access Token là một mã bí mật dùng cho ứng dụng để có thể truy cập API. Access Token có thể là một string, JWT token, hay một token không phải là JWT. Nó báo cho API biết được là ứng dụng đã được cấp quyền cho một số action nhất định dựa trên scope mà ứng dụng đã được cấp.

ID Token là một JWT chứa các thông tin nhận dạng. Nó được ứng dụng sử dụng để lấy các thông tin của user như user name, email… và hiển thị lên giao diện. ID Token tuân theo chuẩn công nghiệp (IETF RFC 7519)  và gồm có 3 phần: header, body và chữ ký.

JWT Token chứa các claim là các thông tin về định danh (như là name, email address) của một thực thể (thông thường là user) và các thông tin metadata khác.

One thought on “Cùng tìm hiểu Cơ chế xác thực bằng OpenID Connect

Leave a comment