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.
Domain Hint API
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 được 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, trong đó trang web được truy cập bị hạn chế ở 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 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, chỉ để sau đó nhận được thông báo lỗi (hoặc không nhận được thông báo nào khi không đăng nhập được) vì không sử dụng đúng loại tài khoản.
Với API Gợi ý miền, RP có thể chỉ định một thuộc tính domainHint
trên lệnh gọi API FedCM để chỉ hiển thị những tài khoản khớp với 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.
Phản hồi JSON mẫu từ điểm cuối 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()
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 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 danh sách tài khoản để lọc phía máy chủ, vì đó có thể là vectơ vân tay số cho IdP.
Thay vào đó, Chrome 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 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 trả lời câu hỏi "đâu là giá trị nhận dạng cho người dùng mà tôi muốn?", còn API Gợi ý miền nhằm trả lời câu hỏi "tài khoản này phải thuộc về công ty hoặc máy chủ nào?".
Khi sử dụng domainHint: "any"
, Chrome sẽ lọc ra những tài khoản không có miền nào (tức 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 trong đó RP chỉ cho phép 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 thêm vào bằng gợi ý đăng nhập và tham số truy vấn gợi ý miền.

domainHint
.