{"id":9365,"date":"2026-08-11T17:35:00","date_gmt":"2026-08-11T15:35:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=9365"},"modified":"2026-10-09T23:17:37","modified_gmt":"2026-10-09T21:17:37","slug":"passkey-pflicht-fur-die-google-ads-api-worauf-sie-sich-bezieht","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/passkey-pflicht-fur-die-google-ads-api-worauf-sie-sich-bezieht\/","title":{"rendered":"Passkey-Pflicht f\u00fcr die Google Ads API: Worauf sie sich bezieht und wie vergessene Autorisierungen zu finden sind"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Google hat die Passkey-Pflicht f\u00fcr den Zugriff auf die Google Ads API am 27.07.2026 angek\u00fcndigt, der Rollout l\u00e4uft seit dem 5. August. Seither taucht in jedem Team-Chat dieselbe Frage in immer neuen Varianten auf: \u201eM\u00fcssen wir unseren OAuth Client neu ausstellen?&#8221; Nein. Die Anforderung betrifft die Art, wie sich der User Account hinter einer Autorisierung anmeldet. Der OAuth Client ist von dieser \u00c4nderung nicht betroffen, und bestehende Tokens bleiben g\u00fcltig \u2013 bis dahin h\u00f6rt also nichts auf zu funktionieren. Gefragt ist keine Panikmigration, sondern eine ehrliche Bestandsaufnahme: Welche Integrationen h\u00e4ngen daran, dass sich ein Mensch anmelden kann?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Der Login f\u00e4llt darunter, der OAuth Client nicht<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Die Unterscheidung ist schmal, und sie entscheidet alles Weitere. Wurde eine Integration von einer Person autorisiert, die sich mit ihrem eigenen Google-Konto durch einen Consent Screen geklickt hat, dann f\u00e4llt die Anmeldung dieses Kontos unter die Passkey-Pflicht. L\u00e4uft sie \u00fcber einen Service Account, dann nicht: Service Accounts sind ausgenommen. Gleiche API, gleiche Client Library, gleiche Customer IDs \u2013 der einzige Unterschied ist, wer sich authentifiziert hat.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Daraus folgen zwei Dinge. Kein Dashboard geht an einem festen Stichtag aus: Bestehende Tokens funktionieren weiter, der kritische Moment ist erst die n\u00e4chste Anmeldung \u2013 etwa nachdem ein Token versehentlich widerrufen wurde oder eine Maschine neu aufgesetzt worden ist. Und das Risiko steckt in Personen, nicht im Code. Kein Repository verr\u00e4t, wer den Refresh Token besitzt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Eine Richtigstellung, weil sie sich hartn\u00e4ckig h\u00e4lt: Mehrere Beitr\u00e4ge behaupten, f\u00fcr betroffene Konten gebe es eine siebent\u00e4gige Sperrfrist. Die Ank\u00fcndigung sagt etwas Engeres: Bevor ein neu angelegter Passkey vertrauensw\u00fcrdig und einsatzbereit ist, kann eine Sicherheitsverz\u00f6gerung von sieben Tagen gelten. Das sperrt kein Konto und setzt keine Frist, aber ein Passkey, der erst bei der n\u00e4chsten f\u00e4lligen Anmeldung entsteht, ist dann wom\u00f6glich noch nicht nutzbar.<\/p>\n\n\n\r\n<figure class=\"lw-diagram\">\n<img decoding=\"async\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/hand-adspasskey-de.png\" width=\"1120\" height=\"656\" loading=\"lazy\" alt=\"Zwei Wege zu einem Kontrollpunkt: eine \u00fcber ein pers\u00f6nliches Konto autorisierte Integration muss die Passkey-Pflicht passieren, ein Service Account umgeht sie\">\n<figcaption>Die Pflicht trifft das Konto, das die Integration autorisiert hat, nicht den OAuth-Client. Was \u00fcber einen Service Account l\u00e4uft, geht am Kontrollpunkt vorbei; was \u00fcber eine Person l\u00e4uft, nicht.<\/figcaption>\n<\/figure>\r\n\n\n\n<h2 class=\"wp-block-heading\">2. Festhalten, wer was autorisiert<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Am Anfang steht etwas, das fast niemand hat: eine schriftliche \u00dcbersicht der eigenen Zug\u00e4nge. Eine YAML-Datei im Repository ist ein Anfang, besser ist eine kleine SQLite-Tabelle, denn sie wird abgefragt werden. Wichtig sind genau die Spalten, die sich in sechs Monaten nicht mehr aus dem Ged\u00e4chtnis rekonstruieren lassen.<\/p>\n\n\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"sql\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">SQL<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-sql\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-keyword\">create<\/span> <span class=\"cbb-keyword\">table<\/span> <span class=\"cbb-function\">ads_authorization<\/span> (\n<\/span><span class=\"cbb-line\">  integration     <span class=\"cbb-type\">text<\/span> <span class=\"cbb-keyword\">primary<\/span> <span class=\"cbb-keyword\">key<\/span>,\n<\/span><span class=\"cbb-line\">  auth_type       <span class=\"cbb-type\">text<\/span> <span class=\"cbb-keyword\">not<\/span> <span class=\"cbb-constant\">null<\/span> <span class=\"cbb-keyword\">check<\/span> (auth_type <span class=\"cbb-keyword\">in<\/span> (<span class=\"cbb-string\">'user_account'<\/span>,<span class=\"cbb-string\">'service_account'<\/span>)),\n<\/span><span class=\"cbb-line\">  google_account  <span class=\"cbb-type\">text<\/span>,\n<\/span><span class=\"cbb-line\">  config_path     <span class=\"cbb-type\">text<\/span>,\n<\/span><span class=\"cbb-line\">  token_store     <span class=\"cbb-type\">text<\/span>,\n<\/span><span class=\"cbb-line\">  owner           <span class=\"cbb-type\">text<\/span> <span class=\"cbb-keyword\">not<\/span> <span class=\"cbb-constant\">null<\/span>,\n<\/span><span class=\"cbb-line\">  deputy          <span class=\"cbb-type\">text<\/span>,\n<\/span><span class=\"cbb-line\">  customer_ids    <span class=\"cbb-type\">text<\/span>,\n<\/span><span class=\"cbb-line\">  last_verified   <span class=\"cbb-type\">date<\/span>\n<\/span><span class=\"cbb-line\">);\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">insert<\/span> <span class=\"cbb-keyword\">into<\/span> ads_authorization <span class=\"cbb-keyword\">values<\/span>\n<\/span><span class=\"cbb-line\"> (<span class=\"cbb-string\">'nightly-cost-load'<\/span>,<span class=\"cbb-string\">'user_account'<\/span>,<span class=\"cbb-string\">'ads-bot@example.com'<\/span>,<span class=\"cbb-string\">'\/srv\/etl\/conf\/ads.yaml'<\/span>,\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-string\">'vault:kv\/ads\/refresh'<\/span>,<span class=\"cbb-string\">'l.wojcik'<\/span>,<span class=\"cbb-string\">'m.kowalski'<\/span>,<span class=\"cbb-string\">'123-456-7890,222-333-4444'<\/span>,<span class=\"cbb-string\">'2026-08-08'<\/span>),\n<\/span><span class=\"cbb-line\"> (<span class=\"cbb-string\">'bi-connector'<\/span>,<span class=\"cbb-string\">'service_account'<\/span>,<span class=\"cbb-constant\">null<\/span>,<span class=\"cbb-string\">'\/srv\/bi\/sa.json'<\/span>,\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-string\">'gcp-secret-manager'<\/span>,<span class=\"cbb-string\">'platform-team'<\/span>,<span class=\"cbb-constant\">null<\/span>,<span class=\"cbb-string\">'123-456-7890'<\/span>,<span class=\"cbb-string\">'2026-08-08'<\/span>);<\/span><\/code><\/pre><\/figure>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>auth_type:<\/strong> trennt den Bestand mit einer einzigen <code>where<\/code>-Klausel in betroffen und nicht betroffen.<\/li>\n<li><strong>deputy:<\/strong> das Feld, um das es bei dieser Anforderung eigentlich geht. Wenn die Person in <code>owner<\/code> drei Wochen weg ist, wer meldet sich dann an?<\/li>\n<li><strong>token_store:<\/strong> Ein pers\u00f6nliches Home-Verzeichnis ist hier ein Befund, kein Wert.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">3. Die vergessenen Autorisierungen finden<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ein Inventar ist nur so gut wie seine Abdeckung, und wehtun werden genau die vergessenen Eintr\u00e4ge. Die Config-B\u00e4ume durchsuchen und das Ergebnis anschlie\u00dfend mit dem Notierten vergleichen.<\/p>\n\n\n<figure style=\"--cbb-digits:1\" class=\"cbb cbb--wrap wp-block-code-beautifier-block-code\" data-lang=\"bash\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Shell<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-bash\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-function\">grep<\/span> <span class=\"cbb-attr\">-rIls<\/span> <span class=\"cbb-attr\">-e<\/span> refresh_token <span class=\"cbb-attr\">--include<\/span>=<span class=\"cbb-string\">'*.y*ml'<\/span> <span class=\"cbb-attr\">--include<\/span>=<span class=\"cbb-string\">'*.json'<\/span> <span class=\"cbb-attr\">--include<\/span>=<span class=\"cbb-string\">'*.env'<\/span> \\\n<\/span><span class=\"cbb-line\">  \/etc \/srv \/opt \/home<\/span><\/code><\/pre><\/figure>\n\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"python\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Python<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-python\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-comment\">#!\/usr\/bin\/env python3<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-string\">\"\"\"Lokale OAuth-Configs klassifizieren und mit dem Zugangsinventar abgleichen.\"\"\"<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">import<\/span> pathlib, re, sqlite3, sys\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\">root = pathlib.<span class=\"cbb-function\">Path<\/span>(sys.argv&#91;<span class=\"cbb-number\">1<\/span>&#93;)\n<\/span><span class=\"cbb-line\">patterns = (<span class=\"cbb-string\">\"*.yaml\"<\/span>, <span class=\"cbb-string\">\"*.yml\"<\/span>, <span class=\"cbb-string\">\"*.json\"<\/span>, <span class=\"cbb-string\">\"*.env\"<\/span>, <span class=\"cbb-string\">\"*.ini\"<\/span>)\n<\/span><span class=\"cbb-line\">has_refresh = re.<span class=\"cbb-function\">compile<\/span>(<span class=\"cbb-string\">r\"refresh_token\\s*&#91;:=&#93;\\s*\\S\"<\/span>)\n<\/span><span class=\"cbb-line\">is_service = re.<span class=\"cbb-function\">compile<\/span>(<span class=\"cbb-string\">r\"service_account|private_key_id\"<\/span>)\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\">db = sqlite3.<span class=\"cbb-function\">connect<\/span>(<span class=\"cbb-string\">\"access.db\"<\/span>)\n<\/span><span class=\"cbb-line\">known = {row&#91;<span class=\"cbb-number\">0<\/span>&#93; <span class=\"cbb-keyword\">for<\/span> row <span class=\"cbb-keyword\">in<\/span> db.<span class=\"cbb-function\">execute<\/span>(<span class=\"cbb-string\">\"select config_path from ads_authorization\"<\/span>)}\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">for<\/span> pattern <span class=\"cbb-keyword\">in<\/span> patterns:\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">for<\/span> path <span class=\"cbb-keyword\">in<\/span> <span class=\"cbb-function\">sorted<\/span>(root.<span class=\"cbb-function\">rglob<\/span>(pattern)):\n<\/span><span class=\"cbb-line\">        text = path.<span class=\"cbb-function\">read_text<\/span>(errors=<span class=\"cbb-string\">\"ignore\"<\/span>)\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">if<\/span> <span class=\"cbb-keyword\">not<\/span> (has_refresh.<span class=\"cbb-function\">search<\/span>(text) <span class=\"cbb-keyword\">or<\/span> is_service.<span class=\"cbb-function\">search<\/span>(text)):\n<\/span><span class=\"cbb-line\">            <span class=\"cbb-keyword\">continue<\/span>\n<\/span><span class=\"cbb-line\">        kind = <span class=\"cbb-string\">\"service_account\"<\/span> <span class=\"cbb-keyword\">if<\/span> is_service.<span class=\"cbb-function\">search<\/span>(text) <span class=\"cbb-keyword\">else<\/span> <span class=\"cbb-string\">\"user_account\"<\/span>\n<\/span><span class=\"cbb-line\">        flag = <span class=\"cbb-string\">\"\"<\/span> <span class=\"cbb-keyword\">if<\/span> <span class=\"cbb-function\">str<\/span>(path) <span class=\"cbb-keyword\">in<\/span> known <span class=\"cbb-keyword\">else<\/span> <span class=\"cbb-string\">\"  UNTRACKED\"<\/span>\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-function\">print<\/span>(<span class=\"cbb-string\">f\"{kind:16}{path}{flag}\"<\/span>)<\/span><\/code><\/pre><\/figure>\n\n\n<p class=\"wp-block-paragraph\">Das Skript geh\u00f6rt auf jeden Host, der mit der API spricht \u2013 auch auf dem Analysten-Laptop, den niemand erw\u00e4hnen m\u00f6chte. Jede <code>UNTRACKED<\/code>-Zeile ist entweder eine im Inventar fehlende Zeile oder ein Credential, das heute zu widerrufen ist. Hinter jeder <code>user_account<\/code>-Zeile steht eine Person, die jetzt namentlich zu benennen ist.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4. Der Notfallpfad f\u00fcr geteilte Zug\u00e4nge und Agenturzug\u00e4nge<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Jetzt der operative Teil. F\u00fcr jede <code>user_account<\/code>-Zeile geh\u00f6rt vorab festgelegt, was passiert, wenn diese Person nicht erreichbar ist \u2013 denn eine Anmeldung, die einen Passkey verlangt, verlangt auch den Menschen, der ihn besitzt.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Eine Vertretung benennen, die im Rahmen der eigenen Richtlinien Zugriff auf dasselbe Google-Konto hat, und sie in die Matrix eintragen.<\/li>\n<li>Den Refresh Token aus pers\u00f6nlichen Dateien heraus in den Secret Store holen, damit die erneute Authentifizierung der einzige Schritt bleibt, f\u00fcr den es noch eine Person braucht.<\/li>\n<li>Pro Integration notieren, welche Customer IDs keine Daten mehr liefern, wenn diese Autorisierung wegbricht. Das Ausma\u00df dieses Ausfalls bestimmt die Reihenfolge der Arbeit.<\/li>\n<li>Bei Agentur-Setups schriftlich festhalten, welche Seite die Autorisierung h\u00e4lt und wer an einem Freitagabend angerufen wird. Anschlie\u00dfend pr\u00fcfen, ob dort ein Service Account praktikabel ist, denn solche Zeilen fallen vollst\u00e4ndig aus dem Geltungsbereich der Anforderung heraus.<\/li>\n<\/ol>\n\n\n<figure style=\"--cbb-digits:1\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"sql\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">SQL<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-sql\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-keyword\">select<\/span> integration, google_account, owner, customer_ids\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">from<\/span> ads_authorization\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">where<\/span> auth_type = <span class=\"cbb-string\">'user_account'<\/span>\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">and<\/span> (deputy <span class=\"cbb-keyword\">is<\/span> <span class=\"cbb-constant\">null<\/span> <span class=\"cbb-keyword\">or<\/span> last_verified &lt; <span class=\"cbb-type\">date<\/span>(<span class=\"cbb-string\">'now'<\/span>,<span class=\"cbb-string\">'-90 day'<\/span>))\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">order<\/span> <span class=\"cbb-keyword\">by<\/span> owner;<\/span><\/code><\/pre><\/figure>\n\n\n<p class=\"wp-block-paragraph\">Diese Abfrage geh\u00f6rt in einen viertelj\u00e4hrlichen Cronjob, der die Ausgabe per Mail verschickt. Eine leere Ergebnismenge ist das gesamte Review.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5. Fazit<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Damit stehen drei kleine Dinge: eine Tabelle, die festh\u00e4lt, welche Integration von welchem Konto autorisiert ist, einen Suchlauf, der die Konfigurationen findet, die niemand dokumentiert hat, und eine Abfrage, die jeden Single Point of Failure ohne Vertretung auflistet. Nichts davon ist auf Google beschr\u00e4nkt. Es beantwortet eine Frage, die fr\u00fcher oder sp\u00e4ter jede API aufwirft, in deren Autorisierungskette ein Mensch steht.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der Gewinn ist Ruhe. Bestehende Tokens funktionieren weiter, Service Accounts sind ausgenommen, der OAuth Client bleibt unangetastet, und die siebent\u00e4gige Sperre, die in den Foren immer wieder behauptet wird, ist in der Ank\u00fcndigung nur eine m\u00f6gliche Wartezeit, bevor ein neuer Passkey funktioniert. Das Original geh\u00f6rt gelesen, bevor irgendeine Zusammenfassung zur Handlungsgrundlage wird \u2013 auch dieser hier: <a href=\"https:\/\/ads-developers.googleblog.com\/2026\/07\/passkey-authentication-requirement-for.html\">Passkey authentication requirement for the Google Ads API<\/a>. Und die gesparte Zeit geh\u00f6rt in die Zeilen der Matrix, in denen <code>deputy<\/code> noch leer ist.<\/p>\n\n\n<div class=\"lw-faq\">\n<h2>Fragen und Antworten<\/h2>\n\n<h3>Betrifft die Passkey-Pflicht auch die allt\u00e4gliche Anmeldung an der Google-Ads-Oberfl\u00e4che oder nur den Weg \u00fcber die API?<\/h3>\n<p>Betroffen ist die Anmeldung des Google-Kontos, das die Autorisierung erteilt hat. Ein getrenntes \u201eAPI-Login\u201c, an dem sich das aufteilen lie\u00dfe, gibt es dabei nicht: Es ist dasselbe Konto mit derselben Anmeldung, mit der die Person auch die Oberfl\u00e4che nutzt. Wird es auf einen Passkey umgestellt, gilt das f\u00fcr beide Wege.<\/p>\n<p>Praktisch verschiebt das die Aufgabe aus dem Tracking in die IT-Betreuung: Die betreffende Person braucht einen Passkey auf einem Ger\u00e4t, das sie im Zweifel dabeihat, und einen zweiten Weg f\u00fcr den Fall, dass dieses Ger\u00e4t fehlt. Beides ist unspektakul\u00e4r, solange es vorher gekl\u00e4rt wird.<\/p>\n<p>Der ung\u00fcnstige Zeitpunkt daf\u00fcr ist der, an dem ein Token unerwartet ung\u00fcltig wird, etwa an einem Freitagabend und bei einer Person, die gerade nicht erreichbar ist. Genau deshalb steht im Artikel das Feld f\u00fcr die Vertretung an so prominenter Stelle: Es ist die Angabe in der Bestandsaufnahme, die diesen Abend verhindert.<\/p>\n<\/div>\n\n<div class=\"lw-quellen\">\n<h2>Quellen<\/h2>\n<ul>\n<li><a href=\"https:\/\/ads-developers.googleblog.com\/2026\/07\/passkey-authentication-requirement-for.html\" target=\"_blank\" rel=\"noopener noreferrer\">Passkey authentication requirement for the Google Ads API<\/a><\/li>\n<li><a href=\"https:\/\/developers.google.com\/google-ads\/api\/docs\/get-started\/introduction\" target=\"_blank\" rel=\"noopener noreferrer\">Google Ads API documentation<\/a><\/li>\n<\/ul>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Die Passkey-Pflicht, deren Rollout am 5. August begonnen hat, betrifft den User Account hinter der Autorisierung, nicht den OAuth Client \u2013 Service Accounts sind ausgenommen.<\/p>\n","protected":false},"author":1,"featured_media":15123,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[92026,92068,92048,92071],"class_list":["post-9365","post","type-post","status-publish","format-standard","hentry","category-digital-marketing-de","tag-marketing-cyfrowy-pl-de","tag-google-ads-de","tag-rest-api-de","tag-web-security-de"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Passkey-Pflicht f\u00fcr die Google Ads API: Worauf sie sich bezieht und wie vergessene Autorisierungen zu finden sind | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"Google Ads API und Passkeys: betroffene Konten einordnen, OAuth-Autorisierungen inventarisieren und vergessene Zug\u00e4nge aufsp\u00fcren.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/passkey-pflicht-fur-die-google-ads-api-worauf-sie-sich-bezieht\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Passkey-Pflicht f\u00fcr die Google Ads API: Worauf sie sich bezieht und wie vergessene Autorisierungen zu finden sind | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"Google Ads API und Passkeys: betroffene Konten einordnen, OAuth-Autorisierungen inventarisieren und vergessene Zug\u00e4nge aufsp\u00fcren.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/passkey-pflicht-fur-die-google-ads-api-worauf-sie-sich-bezieht\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-11T15:35:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-09T21:17:37+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-9365-google-ads-api-passkeys-oauth-client-n.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Lukas Wojcik\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lukas Wojcik\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/passkey-pflicht-fur-die-google-ads-api-worauf-sie-sich-bezieht\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/passkey-pflicht-fur-die-google-ads-api-worauf-sie-sich-bezieht\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Passkey-Pflicht f\u00fcr die Google Ads API: Worauf sie sich bezieht und wie vergessene Autorisierungen zu finden sind\",\"datePublished\":\"2026-08-11T15:35:00+00:00\",\"dateModified\":\"2026-10-09T21:17:37+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/passkey-pflicht-fur-die-google-ads-api-worauf-sie-sich-bezieht\\\/\"},\"wordCount\":1066,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/passkey-pflicht-fur-die-google-ads-api-worauf-sie-sich-bezieht\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-9365-google-ads-api-passkeys-oauth-client-n.png\",\"keywords\":[\"Digital Marketing\",\"Google Ads\",\"REST API\",\"Web Security\"],\"articleSection\":[\"Digital Marketing\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/passkey-pflicht-fur-die-google-ads-api-worauf-sie-sich-bezieht\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/passkey-pflicht-fur-die-google-ads-api-worauf-sie-sich-bezieht\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/passkey-pflicht-fur-die-google-ads-api-worauf-sie-sich-bezieht\\\/\",\"name\":\"Passkey-Pflicht f\u00fcr die Google Ads API: Worauf sie sich bezieht und wie vergessene Autorisierungen zu finden sind | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/passkey-pflicht-fur-die-google-ads-api-worauf-sie-sich-bezieht\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/passkey-pflicht-fur-die-google-ads-api-worauf-sie-sich-bezieht\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-9365-google-ads-api-passkeys-oauth-client-n.png\",\"datePublished\":\"2026-08-11T15:35:00+00:00\",\"dateModified\":\"2026-10-09T21:17:37+00:00\",\"description\":\"Google Ads API und Passkeys: betroffene Konten einordnen, OAuth-Autorisierungen inventarisieren und vergessene Zug\u00e4nge aufsp\u00fcren.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/passkey-pflicht-fur-die-google-ads-api-worauf-sie-sich-bezieht\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/passkey-pflicht-fur-die-google-ads-api-worauf-sie-sich-bezieht\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/passkey-pflicht-fur-die-google-ads-api-worauf-sie-sich-bezieht\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-9365-google-ads-api-passkeys-oauth-client-n.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-9365-google-ads-api-passkeys-oauth-client-n.png\",\"width\":1200,\"height\":630,\"caption\":\"Passkey-Pflicht f\u00fcr die Google Ads API: Worauf sie sich bezieht und wie vergessene Autorisierungen zu finden sind\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/passkey-pflicht-fur-die-google-ads-api-worauf-sie-sich-bezieht\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Passkey-Pflicht f\u00fcr die Google Ads API: Worauf sie sich bezieht und wie vergessene Autorisierungen zu finden sind\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Passkey-Pflicht f\u00fcr die Google Ads API: Worauf sie sich bezieht und wie vergessene Autorisierungen zu finden sind | Lukas Wojcik","description":"Google Ads API und Passkeys: betroffene Konten einordnen, OAuth-Autorisierungen inventarisieren und vergessene Zug\u00e4nge aufsp\u00fcren.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/passkey-pflicht-fur-die-google-ads-api-worauf-sie-sich-bezieht\/","og_locale":"en_US","og_type":"article","og_title":"Passkey-Pflicht f\u00fcr die Google Ads API: Worauf sie sich bezieht und wie vergessene Autorisierungen zu finden sind | Lukas Wojcik","og_description":"Google Ads API und Passkeys: betroffene Konten einordnen, OAuth-Autorisierungen inventarisieren und vergessene Zug\u00e4nge aufsp\u00fcren.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/passkey-pflicht-fur-die-google-ads-api-worauf-sie-sich-bezieht\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-08-11T15:35:00+00:00","article_modified_time":"2026-10-09T21:17:37+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-9365-google-ads-api-passkeys-oauth-client-n.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/passkey-pflicht-fur-die-google-ads-api-worauf-sie-sich-bezieht\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/passkey-pflicht-fur-die-google-ads-api-worauf-sie-sich-bezieht\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Passkey-Pflicht f\u00fcr die Google Ads API: Worauf sie sich bezieht und wie vergessene Autorisierungen zu finden sind","datePublished":"2026-08-11T15:35:00+00:00","dateModified":"2026-10-09T21:17:37+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/passkey-pflicht-fur-die-google-ads-api-worauf-sie-sich-bezieht\/"},"wordCount":1066,"commentCount":1,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/passkey-pflicht-fur-die-google-ads-api-worauf-sie-sich-bezieht\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-9365-google-ads-api-passkeys-oauth-client-n.png","keywords":["Digital Marketing","Google Ads","REST API","Web Security"],"articleSection":["Digital Marketing"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/passkey-pflicht-fur-die-google-ads-api-worauf-sie-sich-bezieht\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/passkey-pflicht-fur-die-google-ads-api-worauf-sie-sich-bezieht\/","url":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/passkey-pflicht-fur-die-google-ads-api-worauf-sie-sich-bezieht\/","name":"Passkey-Pflicht f\u00fcr die Google Ads API: Worauf sie sich bezieht und wie vergessene Autorisierungen zu finden sind | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/passkey-pflicht-fur-die-google-ads-api-worauf-sie-sich-bezieht\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/passkey-pflicht-fur-die-google-ads-api-worauf-sie-sich-bezieht\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-9365-google-ads-api-passkeys-oauth-client-n.png","datePublished":"2026-08-11T15:35:00+00:00","dateModified":"2026-10-09T21:17:37+00:00","description":"Google Ads API und Passkeys: betroffene Konten einordnen, OAuth-Autorisierungen inventarisieren und vergessene Zug\u00e4nge aufsp\u00fcren.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/passkey-pflicht-fur-die-google-ads-api-worauf-sie-sich-bezieht\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/passkey-pflicht-fur-die-google-ads-api-worauf-sie-sich-bezieht\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/passkey-pflicht-fur-die-google-ads-api-worauf-sie-sich-bezieht\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-9365-google-ads-api-passkeys-oauth-client-n.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-9365-google-ads-api-passkeys-oauth-client-n.png","width":1200,"height":630,"caption":"Passkey-Pflicht f\u00fcr die Google Ads API: Worauf sie sich bezieht und wie vergessene Autorisierungen zu finden sind"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/passkey-pflicht-fur-die-google-ads-api-worauf-sie-sich-bezieht\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Passkey-Pflicht f\u00fcr die Google Ads API: Worauf sie sich bezieht und wie vergessene Autorisierungen zu finden sind"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/9365","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=9365"}],"version-history":[{"count":6,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/9365\/revisions"}],"predecessor-version":[{"id":22229,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/9365\/revisions\/22229"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/15123"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=9365"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=9365"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=9365"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}