logo

Seznam pro vývojáře

Spravovat služby

Přihlášení přes Seznam

Seznam pro vývojářePřihlášení přes SeznamFedCM

Federated Credential Management

Co je FedCM?

Federated Credential Management (FedCM) je webová technologie, která umožňuje bezpečné a rychlé přihlašování bez přesměrování. Uživatel si jednoduše vybere účet přímo v prohlížeči a přihlásí se jedním kliknutím. Přihlášené návštěvníky můžete spolehlivě identifikovat a díky efektivnějšímu cílení jim zobrazovat reklamu, která je více osloví. To vám umožňí potenciálně zvýšit výnosy z návštěvnosti.

Výhody FedCM

  • Zjednodušuje přihlášení pomocí účtu u identity providera.
  • Přihlášení se uživateli aktivně nabízí.
  • Dokončení přihlášení je jedním kliknutím.
  • Jde o funkci prohlížeče – unifikované, univerzální a spolehlivé řešení.
  • Uživatel se přihlásí „na jeden klik“ a je tak větší šance, že vůbec přihlášení u vás na webu provede = získáte větší množství přihlášených uživatelů, se kterými můžete lépe pracovat.

Pokud máte zájem o Přihlášení přes Seznam s FedCM na vašem webu, musíte:

Podrobné informace o tom, jak FedCM funguje: FedCM API guide

Klientská část

K základnímu zprovoznění FedCM můžete použít JavaScript uvedený v ukázce níže. Pokud je uživatel v prohlížeči přihlášen k účtu Seznamu (prostřednictvím svého e–mailu anebo telefonního čísla) a zároveň na stránce zavoláte níže uvedený JavaScript, zobrazí se uživateli okno s dotazem, jestli chce být přes Seznam přihlášen i na vašem webu.

Vyvolání FedCM dialogu je tedy pod vaší kontrolou. Abyste předešli zbytečnému zobrazování dialogu u již přihlášených uživatelů, musíte se řídit aktuálním stavem:

Přihlášením se zde rozumí přihlášení přes účet Seznamu. Případné uživatelské účty registrované dříve pouze na vašem webu je třeba sloučit s přihlášením přes Seznam (viz kapitola Uložení uživatele).

Ukázka JavaScript kódu // neni podporovano ve vsech prohlizecich if ("IdentityCredential" in window) { async function getCredential() { try { const credential = await navigator.credentials.get({ identity: { context: "signin", providers: [{ // nemenna adresa konf. souboru configURL: "https://login.szn.cz/fedcm/config.json", // vase client_id clientId: "5257140..." }] } }); // naplneni promenne v pripade uspesneho (odsouhlaseneho) FedCM dialogu const code = credential.token; // predani kodu vasi serverove casti // ( . . . ) } catch (e) {} } getCredential(); }

Jako hodnotu clientId použijte odpovídající řetězec (client_id), který jste získali v předchozí části. Kód je připravený jen pro jednu přihlašovací službu (Seznam) a je funkční v nejrozšířenějších prohlížečích – Google Chrome, Microsoft Edge, Opera. Pokud chcete, aby si uživatel mohl vybrat, jestli se přihlásí přes svůj účet u Seznamu, nebo například přes svůj Google účet, musíte do kódu přidat oba poskytovatele. Podpora více poskytovatelů je v prohlížeči Chrome dostupná od verze 136 výše.

Do pole providers stačí přidat obě služby a jejich ID klienta jako samostatné objekty. Definice může vypadat například takto:

providers: [{ configURL: "https://login.szn.cz/fedcm/config.json", clientId: "5257140..." }, { configURL: "https://accounts.google.com/gsi/fedcm.json", clientId: "5902040..." }]

Podpora více poskytovatelů v poli providers je dostupná v prohlížeči Chrome od verze 136 a novější.

Serverová část

Využitím vašeho client_idclient_secret získáte access_token s jehož pomocí následně i data o uživateli.

Příklad v jazyce Python # nejprve ziskate access_token res = requests.post("https://login.szn.cz/api/v1/oauth/token", json={ "grant_type": "authorization_code", "code": code, # kod ziskany v klientske casti (pomoci FedCM) "client_id": "5257140...", # vase client_id "client_secret": "e9d4c83..." # vase client_secret }) access_token = res.json().get("access_token") token_type = res.json().get("token_type") # ziskani uzivatelskych dat headers = {"Authorization": f"{token_type} {access_token}"} user_data = requests.get("https://login.szn.cz/api/v1/user", headers=headers)
Příklad v jazyce PHP <?php // 1) Získání access_tokenu $auth_code = "VÁŠ_AUTH_CODE"; // kód získaný z klientské části (pomocí FedCM) $client_id = "5257140..."; // vaše client_id $client_secret = "e9d4c83..."; // vaše client_secret $token_url = "https://login.szn.cz/api/v1/oauth/token"; $data = [ "grant_type" => "authorization_code", "code" => $auth_code, "client_id" => $client_id, "client_secret" => $client_secret ]; // cURL požadavek na získání access tokenu $ch = curl_init($token_url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type: application/json"]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); $res = json_decode($response, true); $access_token = $res["access_token"] ?? null; $token_type = $res["token_type"] ?? null; // 2) Získání uživatelských dat if ($access_token && $token_type) { $user_url = "https://login.szn.cz/api/v1/user"; $ch = curl_init($user_url); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: {$token_type} {$access_token}" ]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $user_response = curl_exec($ch); curl_close($ch); $user_data = json_decode($user_response, true); print_r($user_data); } else { echo "Nepodařilo se získat access_token.\n"; }

Podrobný popis endpointu /oauth/token a jeho odpovědi najdete v sekci Přihlášení přes Seznam.

Pokud kvůli dřívější implementaci Přihlášení přes Seznam posíláte na endpoint /oauth/tokenredirect_uri, mějte na paměti, že v rámci FedCM se nepoužívá, proto redirect_uri v tomto případě neposílejte.

Jako odpověď na požadavek odeslaný na https://login.szn.cz/api/v1/user (dále jen „Seznam User API“) dostanete JSON objekt s následujícími údaji o uživateli:

Dostupná uživatelská data v odpovědi accountDisplayName advert_user_id email firstname lastname oauth_user_id

Uložení uživatele

Data získaná jako odpověď ze Seznam User API uložte k záznamu daného uživatele do vaší databáze. Pokud se záznam odpovídající uživateli (za základě ověření, například pomocí e-mailu) ve vaší databázi nenachází, vytvoříte jej s využitím výše uvedených dat.

Pokud záznam uživatele ve vaší databázi již existuje a data ze Seznam User API obsahuje, je možné rovnou pokračovat přihlášením uživatele.

Přihlášení uživatele

Uživatele přihlásíte standardním způsobem, který na svém webu využíváte – vytvoříte mu session nebo vydáte vlastní přístupový token.

Příklad v jazyce PHP demonstruje ověření existence uživatele v databázi CMS WordPress na základě jeho e-mailu následované přihlášením. Pokud záznam uživatele v databázi neexistuje, je před přihlášením vytvořen:

Příklad v jazyce PHP pro WordPress // Najdi existujícího WP uživatele $user = get_user_by('email', $email); if (!$user) { // Pokud neexistuje, vytvoř $user_id = wp_create_user($email, wp_generate_password(), $email); wp_update_user([ 'ID' => $user_id, 'display_name' => $name ]); $user = get_user_by('id', $user_id); } // Přihlaš uživatele wp_set_current_user($user->ID); wp_set_auth_cookie($user->ID);

Pokud se uživatel následně odhlásí, je potřeba jeho session ukončit a chovat se k němu jako k neznámému uživateli, tedy nevyužívat žádné jeho osobní údaje.

Po odhlášení a znovunačtení stránky je ovšem splněna podmínka pro zobrazení FedCM dialogu a automatické přihlášení, což je v dané situaci nežádoucí. Toto chování lze dočasně vypnout tak, že ihned po odhlášení uživatele zavoláte JS navigator.credentials.preventSilentAccess();Tím bude automatické přihlášení na krátký časový úsek vypnuto v souladu s oficiální Google dokumentací.

Propojení přihlášeného uživatele s výdejem reklamy

Jak propojit přihlášeného uživatele s výdejem cílené reklamy se dozvíte >ZDE<.

Poznámky