Federated Credential Management (FedCM) API

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Experimental: This is an experimental technology
Check the Browser compatibility table carefully before using this in production.

Federated Credential Management API (hay FedCM API) cung cấp một cơ chế tiêu chuẩn để các nhà cung cấp danh tính (IdP) triển khai các dịch vụ liên danh tính trên web theo cách bảo vệ quyền riêng tư, mà không cần sử dụng cookie của bên thứ ba và chuyển hướng. Điều này bao gồm một JavaScript API cho phép sử dụng xác thực liên danh cho các hoạt động như đăng nhập hoặc đăng ký trên một trang web.

Các khái niệm FedCM

Liên danh tính là việc ủy quyền xác thực người dùng từ một trang web yêu cầu đăng ký hoặc đăng nhập người dùng, chẳng hạn như trang thương mại điện tử hoặc mạng xã hội (còn gọi là bên dựa vào hay RP), đến một nhà cung cấp danh tính đáng tin cậy của bên thứ ba (IdP) như Google, Facebook/Meta, GitHub, v.v.

Các RP có thể tích hợp với các IdP, cho phép người dùng đăng nhập bằng các tài khoản đã đăng ký với IdP. Việc liên danh tính thông qua một nhóm nhỏ các IdP chuyên dụng đã cải thiện khả năng xác thực trên web về mặt bảo mật, sự tin tưởng của người dùng và trải nghiệm người dùng, so với việc mỗi trang tự quản lý việc đăng nhập với tên người dùng và mật khẩu riêng.

Vấn đề là liên danh tính truyền thống dựa vào <iframe>, chuyển hướng và cookie của bên thứ ba, những tính năng này cũng được sử dụng để theo dõi người dùng của bên thứ ba. Các trình duyệt đang hạn chế việc sử dụng các tính năng này nhằm bảo vệ quyền riêng tư của người dùng, nhưng hệ quả là khiến các trường hợp sử dụng hợp lệ, không theo dõi trở nên khó triển khai hơn, trong đó có liên danh tính.

Điều này ảnh hưởng đến đăng nhập liên danh nói chung, cũng như các trường hợp sử dụng liên danh tính cụ thể hơn:

  • OIDC front-channel logout: Luồng này yêu cầu IDP nhúng nhiều <iframe> RP, vốn dựa vào cookie RP.
  • Social Widgets: Để cung cấp các widget xã hội, cookie của bên thứ ba IdP phải được cung cấp từ nguồn gốc cấp cao nhất của RP.
  • Personalized buttons: Việc hiển thị thông tin đăng nhập được cá nhân hóa trên <button> trong nguồn gốc RP được triển khai dưới dạng <iframe> IdP yêu cầu cookie của bên thứ ba.
  • Làm mới phiên mà không cần điều hướng cấp cao nhất hoặc cửa sổ popup.

FedCM nhằm giải quyết vấn đề này, cung cấp một cơ chế chuyên dụng cho các luồng liên danh tính trên web, và cho phép các trình duyệt hỗ trợ cung cấp các phần tử UI đặc biệt trên RP, cho phép người dùng chọn một tài khoản IdP để sử dụng khi đăng nhập.

Có hai phần khi sử dụng FedCM API, được đề cập trong các hướng dẫn liên kết bên dưới:

  1. Tích hợp IdP với FedCM — những gì nhà cung cấp danh tính cần cung cấp để RP có thể tích hợp với nó.
  2. Đăng nhập liên danh RP — chức năng FedCM mà RP cần sử dụng để đăng nhập người dùng bằng tài khoản IdP của họ. Một yêu cầu đăng nhập liên danh FedCM được khởi tạo bằng phương thức navigator.credentials.get().

Note: Google Sign In là một ví dụ về IdP đã hỗ trợ FedCM. Di chuyển sang FedCM cung cấp hướng dẫn cho các RP muốn di chuyển ứng dụng hiện có sử dụng Google Sign In sang đăng nhập liên danh.

Tích hợp Permissions Policy và hỗ trợ <iframe>

identity-credentials-get Permissions-Policy có thể được sử dụng để kiểm soát quyền sử dụng FedCM. Cụ thể hơn, nó cho phép sử dụng các phương thức sau:

Nhà phát triển có thể cấp quyền rõ ràng cho <iframe> sử dụng FedCM thông qua thuộc tính allow:

html
<iframe src="3rd-party.example" allow="identity-credentials-get"></iframe>

Việc khả dụng của FedCM trong <iframe> cho phép một số trường hợp sử dụng:

  • Các trang web lớn hơn sẽ không muốn script đăng nhập của bên thứ ba giành quyền kiểm soát khung cấp cao nhất; thay vào đó họ muốn thêm script đó và gọi FedCM từ bên trong <iframe>.
  • Một số <iframe> có thể tự yêu cầu xác thực liên danh.

Interface

IdentityCredential

Đại diện cho thông tin xác thực danh tính người dùng phát sinh từ việc xác thực liên danh thành công. Một lệnh gọi navigator.credentials.get() thành công bao gồm tùy chọn identity sẽ trả về một phiên bản IdentityCredential.

IdentityCredentialError

Đại diện cho lỗi xác thực cho biết tác nhân người dùng không nhận được xác nhận danh tính sau khi người dùng yêu cầu xác thực bằng thông tin xác thực liên danh.

IdentityProvider

Đại diện cho một IdP và cung cấp quyền truy cập vào thông tin cũng như chức năng liên quan.

Định nghĩa chức năng đăng nhập cho IdP, bao gồm phương thức Navigator.login.setStatus() để cập nhật trạng thái đăng nhập IdP.

Mở rộng cho các interface khác

CredentialsContainer.get(), tùy chọn identity.

identity là một đối tượng chứa chi tiết về IdP liên danh mà trang web bên dựa vào (RP) có thể sử dụng để đăng nhập người dùng. Nó khiến lệnh gọi get() khởi tạo yêu cầu để người dùng đăng nhập vào RP bằng IdP.

Cung cấp quyền truy cập vào đối tượng NavigatorLogin của trình duyệt.

Tiêu đề HTTP

Set-Login

Cung cấp cơ chế HTTP để cập nhật trạng thái đăng nhập qua HTTP.

Ví dụ

Về mã ví dụ, xem:

Đặc điểm kỹ thuật

Specification
Federated Credential Management API
# browser-api-identity-credential-interface

Tương thích trình duyệt

Xem thêm