Nội dung cập nhật của FedCM: API Gợi ý miền

Trên Chrome 123, bạn có thể sử dụng Gợi ý miền cùng với Federated Credential Management API (FedCM). Với API Gợi ý miền, nhà phát triển có thể mang đến trải nghiệm người dùng tốt hơn bằng cách chỉ hiển thị các tài khoản đăng nhập liên kết từ miền mà họ chấp nhận.

API Gợi ý tên miền

Bạn có thể sử dụng FedCM để giúp người dùng dễ dàng đăng nhập vào một bên phụ thuộc (RP, đề cập đến một trang web) bằng thông tin tài khoản do nhà cung cấp danh tính (IdP) cung cấp. Tuy nhiên, có những trường hợp mà RP đã biết rằng chỉ những tài khoản liên kết với một miền nhất định mới được phép đăng nhập vào trang web. Điều này đặc biệt phổ biến trong các tình huống doanh nghiệp mà trang web bạn đang truy cập bị hạn chế trong một miền của công ty. Để mang lại trải nghiệm tốt hơn cho người dùng, API FedCM cho phép RP chỉ hiển thị những tài khoản có thể dùng để đăng nhập vào RP. Điều này ngăn chặn các trường hợp mà người dùng cố gắng đăng nhập vào RP bằng tài khoản bên ngoài miền công ty, sau này sẽ nhận được thông báo lỗi (hoặc im lặng khi thông tin đăng nhập không hoạt động) vì không sử dụng đúng loại tài khoản.

Với API Gợi ý miền, bên bị hạn chế có thể chỉ định một thuộc tính domainHint trên lệnh gọi API FedCM để chỉ hiển thị các tài khoản trùng khớp cho người dùng. IdP có thể cung cấp một thuộc tính domain_hints trong phản hồi từ điểm cuối danh sách tài khoản để cho biết tài khoản được liên kết với (các) miền nào. Bằng cách này, trình duyệt có thể hiển thị các tài khoản trùng khớp mà không tiết lộ gợi ý miền được yêu cầu cho IdP.

Ví dụ về phản hồi JSON từ điểm cuối của danh sách tài khoản sẽ có dạng như sau:

{
 "accounts": [{
   "id": "1234",
   "given_name": "John",
   "name": "John Doe",
   "email": "john_doe@idp.example",
   "picture": "https://idp.example/profile/123",
   "approved_clients": ["123", "456", "789"],
  }, {
   "id": "5678",
   "given_name": "Johnny",
   "name": "Johnny",
   "email": "johnny@idp.example",
   "picture": "https://idp.example/profile/456"
   "approved_clients": ["abc", "def", "ghi"],
   "domain_hints": ["corp.example"]
  }]
}

RP có thể gọi navigator.credentials.get() với thuộc tính domainHint để lọc các tài khoản. Ví dụ: giả sử người dùng truy cập vào corp-partner.example và đăng nhập bằng một tài khoản từ corp.example. Trang web sẽ gọi API như sau:

return await navigator.credentials.get({
  identity: {
    providers: [{
      configURL: "https://idp.example/manifest.json",
      clientId: "abc",
      nonce: nonce,
      domainHint : "corp.example"
    }]
  }
});

Giá trị domainHint không được gửi đến điểm cuối của danh sách tài khoản để lọc phía máy chủ, vì đó có thể là vectơ vân tay số đến IdP. Thay vào đó, Chrome sẽ thực hiện yêu cầu FedCM như bình thường và lọc ra những tài khoản không khớp với giá trị domainHint được lệnh gọi navigator.credentials.get() chỉ định. Sau đó, Chrome sẽ hiển thị hộp thoại FedCM cho người dùng kèm theo danh sách tài khoản mới. Phương pháp này tương tự như API Gợi ý đăng nhập, nhưng hai API này trả lời các câu hỏi khác nhau. API Gợi ý đăng nhập nhắm đến câu trả lời "thông tin nhận dạng nào là giá trị nhận dạng cho người dùng mà tôi muốn?", trong khi Gợi ý miền nhằm trả lời câu hỏi "tài khoản này thuộc về công ty hay máy chủ nào?".

Khi bạn sử dụng domainHint: "any", Chrome sẽ lọc ra các tài khoản không có miền nào (nghĩa là domain_hints không được truyền hoặc trống). Ví dụ: điều này cho phép các trường hợp sử dụng mà RP chỉ cho phép các tài khoản được quản lý trong quy trình đăng ký.

Khi không có tài khoản nào khớp với domainHint, hộp thoại FedCM sẽ hiển thị lời nhắc đăng nhập, cho phép người dùng đăng nhập vào tài khoản IdP khớp với gợi ý do RP yêu cầu. Khi người dùng nhấn vào lời nhắc, một cửa sổ bật lên sẽ mở ra với URL đăng nhập được chỉ định trong tệp cấu hình. Sau đó, đường liên kết này sẽ được nối với gợi ý đăng nhập và tham số truy vấn gợi ý miền.

Ví dụ về lời nhắc đăng nhập khi không có tài khoản nào khớp với domainHint.
Ví dụ về lời nhắc đăng nhập khi không có tài khoản nào khớp với domainHint.