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

Từ Chrome 123, bạn có thể sử dụng Gợi ý về miền cùng với API Quản lý thông tin xác thực liên kết (FedCM). Bằng API Gợi ý tên miền, nhà phát triển có thể cung cấp 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 trong miền mà các tài khoản đó chấp nhận.

API Gợi ý tên miền

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

Với API Gợi ý miền, bên bị hạn chế có thể chỉ định một tài sản domainHint trên API FedCM để chỉ hiển thị những tài khoản trùng khớp cho người dùng. IdP có thể cung cấp domain_hints thuộc tính như một phần của phản hồi từ danh sách tài khoản điểm cuối thành 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 (nhà cung cấp danh tính).

Ví dụ về phản hồi JSON từ điểm cuối danh sách tài khoản sẽ có dạng như sau 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() bằng 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 tài khoản từ corp.example. Trang web sẽ gọi API dưới dạng 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 danh sách tài khoản điểm cuối để lọc phía máy chủ, vì đó có thể là vectơ tạo vân tay số cho IdP. Thay vào đó, Chrome sẽ thực hiện yêu cầu FedCM như bình thường và lọc ra các tài khoản đó không khớp với giá trị domainHint do Cuộc gọi navigator.credentials.get(). Sau đó, Chrome sẽ hiển thị hộp thoại FedCM cho người dùng với danh sách tài khoản mới. Phương pháp này tương tự như Gợi ý đăng nhập API, nhưng hai API này API trả lời những câu hỏi khác nhau. API Gợi ý đăng nhập nhằm trả lời "một cho người dùng mà tôi muốn?", trong khi Gợi ý tên miền sẽ trả lời "những gì công ty hoặc máy chủ này phải là tài khoản này không?".

Khi bạn sử dụng domainHint: "any", Chrome sẽ lọc ra các tài khoản không có bất kỳ miền nào (nghĩa là domain_hints không được truyền hoặc bị 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 tài khoản được quản lý trong quá trình đăng ký của chúng tôi.

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 một tài khoản IdP khớp với gợi ý mà bên bị hạn chế. 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 cùng với URL đăng nhập được chỉ định trong cấu hình tệp. Liên kết là rồi thêm 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.