October 17 2023
FedCM: road to multi IdP support
Nicolás Peña Moreno
Zachary Tan
BlinkOn 18
Third-party cookies being phased out
Federated login via iframe
BlinkOn 18
Federated Credential Management (FedCM) API
Lack of multiple identity provider support
End goal
ILLUSTRATIVE �MOCKS
Current API shape
let token = await navigator.credentials.get({
identity: {
providers: [{
configURL: "https://idp.example/manifest.json",
clientId: "123",
nonce: nonce
}]
}
});
Problem
Solution 1: array of providers
const token = await navigator.credentials.get({
identity: {
providers: [ // all IDPs are specified in this array
{
configUrl: "https://idp1.com/foo.json", // first IDP
clientId: "123",
},
{
configUrl: "https://idp2.com/bar.json", // second IDP
clientId: "456",
}
]
}
});
Solution 2: wait until a certain point in time
RP specified ordering
Solution 3: dynamically update the UI
ILLUSTRATIVE �MOCKS
Solution 4: IdP registration
# First IdP
IdentityProvider.register(� “https://idp1.example/”);
…
let token = await navigator.credentials.get({
identity: {
providers: [{
configURL: "https://idp1.config",
clientId: "123",
nonce: nonce1
}]}});�
# Second IdP
IdentityProvider.register(� “https://idp2.example/”);�…
let token = await navigator.credentials.get({
identity: {
providers: [{
configURL: "https://idp2.config",
clientId: "456",
nonce: nonce2
}]}});
Solution 5: IdP registration
# First IdP
IdentityProvider.register(� “https://idp1.example/”);
…
# Second IdP
IdentityProvider.register(� “https://idp2.example/”);�…
�
# RP code after loading IdP SDKs
let token = await navigator.credentials.get({
identity: {
providers: "registered"
}]}});
Brainstorm time!