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). Với API Gợi ý 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 trên miền mà họ chấp nhận.
API Gợi ý 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, tham chiếu đến một trang web) bằng cách sử dụ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 trường hợp doanh nghiệp khi trang web được truy cập bị giới hạn trong phạm vi miền của công ty. Để mang lại trải nghiệm người dùng tốt hơn, API FedCM cho phép RP chỉ hiển thị những tài khoản có thể được dùng để đăng nhập vào RP. Đ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 một tài khoản bên ngoài miền của công ty và chỉ nhận được thông báo lỗi sau này (hoặc im lặng khi không đăng nhập được) do 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 thuộc tính domainHint
trong lệnh gọi API FedCM để chỉ hiển thị các tài khoản trùng khớp của người dùng. IdP có thể cung cấp thuộc tính domain_hints
trong phản hồi từ điểm cuối của danh sách tài khoản để cho biết(các) miền mà một tài khoản được liên kết. 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.
Phản hồi JSON mẫu 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"]
}]
}
Bên bị hạn chế 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ử một 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 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ơ tạo vân tay số đến IdP.
Thay vào đó, Chrome sẽ thực hiện yêu cầu FedCM như thường lệ và lọc ra các tài khoản không khớp với giá trị domainHint
do 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 cùng với 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 2 API này giúp trả lời những câu hỏi khác nhau. API Gợi ý đăng nhập nhằm trả lời "giá trị nhận dạng nào cho người dùng tôi muốn?" trong khi tính năng Gợi ý miền nhằm trả lời "tài khoản này phải thuộc về công ty hoặc máy chủ nào?".
Khi domainHint: "any"
được sử dụng, Chrome sẽ lọc ra các tài khoản không có miền nào (tức là domain_hints
không được chuyển hoặc trống). Ví dụ: điều này cho phép các trường hợp sử dụng trong đó 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 sẽ được nối thêm 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 miềnHint.](https://developers.google.cn/static/privacy-sandbox/assets/images/blog/fedcm-123.jpg?authuser=8&hl=vi)
domainHint
.