No Chrome 142, você pode optar por mostrar o domínio do iframe na interface do FedCM quando a parte confiante (RP) é incorporada como um iframe de terceiros em outro site. Esse recurso aumenta a transparência para os usuários quando eles fazem login em um serviço incorporado em um site diferente.
Contexto
Antes, quando o FedCM era invocado em um iframe de origem cruzada, a caixa de diálogo da interface do FedCM mostrava apenas o domínio do site de nível superior. Isso pode confundir os usuários se o serviço com que eles estavam interagindo for diferente do site de nível superior. Por exemplo, um usuário pode estar em um site de notícias que incorpora um widget de comentários. Quando o usuário tenta fazer login no widget de comentários, a caixa de diálogo do FedCM mostra apenas o domínio do site de notícias, não o do serviço de comentários:
Para resolver isso, o Chrome agora tem uma maneira de os IdPs indicarem o domínio do iframe para onde o token é enviado na caixa de diálogo da FedCM, além do domínio do site de nível superior. Isso dá ao usuário uma ideia mais clara de quais serviços de terceiros estão envolvidos no processo de login.
Implementação
O endpoint de metadados do cliente do IdP
recebe um client_id e, opcionalmente, um top_frame_origin. Por exemplo:
GET /client_metadata_endpoint?client_id=1234&top_frame_origin=https%3A%2F%2Ftop-frame.example HTTP/1.1
Host: idp.example
Origin: https://iframe.example/
Accept: application/json
Sec-Fetch-Dest: webidentity
Em seguida, o IdP pode implementar uma lógica personalizada para determinar se o RP e o site de nível superior são da mesma parte. Se o RP for proprietário do site de nível superior e do iframe, o IdP poderá optar por mostrar apenas o domínio de nível superior, que é o comportamento padrão. Para mostrar os dois domínios, o IdP precisa incluir a propriedade
client_is_third_party_to_top_frame_origin na resposta do
endpoint de metadados do cliente
e definir o valor como true.
Confira um exemplo de como seria a resposta do endpoint de metadados do cliente:
// In the client metadata endpoint
const clientIsThirdParty = isClientOriginDifferentFromTopFrame();
responseData = {
privacy_policy_url: "..."
terms_of_service_url: "...",
client_is_third_party_to_top_frame_origin: clientIsThirdParty,
}
Quando essa propriedade é definida como true e o RP é incorporado como um iframe em outro site, a caixa de diálogo do FedCM mostra o domínio do site de nível superior e o do iframe. Isso dá ao usuário mais contexto sobre a solicitação
de login.
O valor padrão de client_is_third_party_to_top_frame_origin é false, então
as implementações atuais não serão afetadas por essa mudança.
Há mais detalhes na documentação sobre como implementar o FedCM em um provedor de identidade.
Faça um teste
Confira uma demonstração ao vivo desse recurso em fedcm-demo-rp.dev/iframe. O código está hospedado no repositório de demonstração do GitHub.
Queremos saber sua opinião sobre esse e outros recursos da FedCM. Compartilhe suas ideias e relate problemas no repositório do FedCM no GitHub.