{"id":8844,"date":"2026-08-22T15:40:00","date_gmt":"2026-08-22T13:40:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=8844"},"modified":"2026-10-24T03:44:37","modified_gmt":"2026-10-24T01:44:37","slug":"sichere-wordpress-rest-api-oauth-2-0-und-benutzerdefinierte-autorisierte","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/sichere-wordpress-rest-api-oauth-2-0-und-benutzerdefinierte-autorisierte\/","title":{"rendered":"Sichere WordPress-REST-API: OAuth 2.0 und benutzerdefinierte, autorisierte Endpunkte"},"content":{"rendered":"<p>Eine sichere WordPress-REST-Schnittstelle braucht drei getrennte Entscheidungen: Wie wird die Gegenstelle erkannt, welche Aktion ist erlaubt und welche Daten werden angenommen? OAuth 2.0 kann dabei helfen. Ein eigenes OAuth-System ist jedoch keine Voraussetzung f\u00fcr jede Integration.<\/p>\n<h2>Anwendungspasswort oder OAuth?<\/h2>\n<p>Anwendungspassw\u00f6rter sind seit WordPress 5.6 Bestandteil von Core. \u00dcber HTTPS authentifizieren diese Zugangsdaten ein WordPress-Konto. Die Rechte stammen vom zugeh\u00f6rigen Konto; Administratorrechte entstehen nur bei entsprechend berechtigten Konten. Ein eigenes Integrationskonto mit gezielt vergebenen F\u00e4higkeiten kann deshalb eine geeignete L\u00f6sung sein. Standardm\u00e4\u00dfig besitzt ein einzelnes Anwendungspasswort keine eigenen engen OAuth-Scopes. Widerruf, sichere Aufbewahrung und Rechtepr\u00fcfung bleiben erforderlich.<\/p>\n<p>OAuth 2.0 erg\u00e4nzt delegierte Autorisierung mit einem Autorisierungsserver und einer passenden WordPress-Anbindung. Core stellt keinen vollst\u00e4ndigen OAuth-2.0-Server bereit. Scopes m\u00fcssen definiert und am Endpunkt tats\u00e4chlich durchgesetzt werden. Kurze Laufzeiten, Refresh-Tokens und Rotation sind Eigenschaften der gew\u00e4hlten Implementierung, keine automatische Folge eines Bearer-Headers. Bei einer Benutzerfreigabe ist ein Authorization-Code-Verfahren mit PKCE nach aktueller Sicherheitspraxis passend; reine Dienstzugriffe ben\u00f6tigen eine daf\u00fcr unterst\u00fctzte L\u00f6sung. OAuth ist weder gleichbedeutend mit JWT noch mit Verschl\u00fcsselung.<\/p>\n<figure class=\"lw-diagram\"><img decoding=\"async\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/dia-8843-rest-api-20261024-de.png\" alt=\"Identit\u00e4t, Rechte und Datenformat\"\/><figcaption>Identit\u00e4t, Rechte und Datenformat<\/figcaption><\/figure>\n<h2>Authentifizierung ersetzt keine Berechtigungspr\u00fcfung<\/h2>\n<p>Ein g\u00fcltiges Token beantwortet noch nicht, ob eine bestimmte Ressource bearbeitet werden darf. Abh\u00e4ngig vom System geh\u00f6ren Aussteller, Zielgruppe, G\u00fcltigkeit, Widerrufsmodell, Scope und zugeordnetes Konto zur Pr\u00fcfung. Bei JWT kommen unter anderem erlaubte Algorithmen und verl\u00e4ssliche Schl\u00fcssel hinzu; blo\u00dfes Dekodieren pr\u00fcft keine Signatur. Diese Aufgaben geh\u00f6ren in eine gepflegte Authentifizierungsanbindung statt in eine undefinierte Hilfsfunktion.<\/p>\n<p>Der permission_callback einer Route pr\u00fcft die erlaubte Aktion, beispielsweise \u00fcber current_user_can(). Bei Zugriffen auf konkrete Beitr\u00e4ge oder Kundenobjekte ist zus\u00e4tzlich die Berechtigung f\u00fcr das jeweilige Objekt n\u00f6tig. Ein ausdr\u00fccklich zur\u00fcckgegebenes true erlaubt den Zugriff; WP_Error verweigert mit einer verst\u00e4ndlichen Antwort. Core behandelt auch false und null als Ablehnung. Andere Werte wie 0 oder eine leere Zeichenfolge d\u00fcrfen nicht als Fehlerantwort verwendet werden: Core wertet diese R\u00fcckgaben nicht wie false.<\/p>\n<h2>Ein vollst\u00e4ndiges, bewusst begrenztes Pr\u00fcfbeispiel<\/h2>\n<p>Das folgende Beispiel registriert ausschlie\u00dflich eine JSON-Pr\u00fcfung. Es speichert keine Telemetrie und implementiert weder OAuth noch eine Ratenbegrenzung. Vorausgesetzt sind WordPress, HTTPS und eine vorhandene unterst\u00fctzte Authentifizierung. Die eigene F\u00e4higkeit lw_validate_telemetry muss bei der Einrichtung gezielt einem passenden Konto oder einer Rolle zugewiesen werden; das Beispiel vergibt selbst keine Rechte. F\u00fcr OAuth m\u00fcssen die Anbindung und die Scope-Pr\u00fcfung zus\u00e4tzlich zum gezeigten Kontorecht bestehen.<\/p>\n<pre class=\"wp-block-code\"><code>&lt;?php\n\/\/ Example validation endpoint: no telemetry is stored.\nadd_action(&#x27;rest_api_init&#x27;, function () {\n    register_rest_route(&#x27;lw-example\/v1&#x27;, &#x27;\/validate-telemetry&#x27;, [\n        &#x27;methods&#x27; =&gt; &#x27;POST&#x27;,\n        &#x27;permission_callback&#x27; =&gt; function () {\n            if (!current_user_can(&#x27;lw_validate_telemetry&#x27;)) {\n                return new WP_Error(&#x27;rest_forbidden&#x27;, &#x27;Not permitted&#x27;, [\n                    &#x27;status&#x27; =&gt; rest_authorization_required_code(),\n                ]);\n            }\n            return true;\n        },\n        &#x27;callback&#x27; =&gt; function (WP_REST_Request $request) {\n            if (!$request-&gt;is_json_content_type()) {\n                return new WP_Error(&#x27;invalid_media_type&#x27;, &#x27;JSON required&#x27;, [&#x27;status&#x27; =&gt; 415]);\n            }\n            if (strlen($request-&gt;get_body()) &gt; 8192) {\n                return new WP_Error(&#x27;body_too_large&#x27;, &#x27;Body too large&#x27;, [&#x27;status&#x27; =&gt; 413]);\n            }\n            $body = $request-&gt;get_json_params();\n            $schema = [\n                &#x27;type&#x27; =&gt; &#x27;object&#x27;,\n                &#x27;required&#x27; =&gt; [&#x27;payload_hash&#x27;],\n                &#x27;additionalProperties&#x27; =&gt; false,\n                &#x27;properties&#x27; =&gt; [\n                    &#x27;payload_hash&#x27; =&gt; [\n                        &#x27;type&#x27; =&gt; &#x27;string&#x27;,\n                        &#x27;minLength&#x27; =&gt; 64,\n                        &#x27;maxLength&#x27; =&gt; 64,\n                        &#x27;pattern&#x27; =&gt; &#x27;^[a-fA-F0-9]{64}$&#x27;,\n                    ],\n                ],\n            ];\n            $valid = rest_validate_value_from_schema($body, $schema, &#x27;body&#x27;);\n            if (is_wp_error($valid)) {\n                return new WP_Error(&#x27;invalid_body&#x27;, &#x27;Invalid JSON body&#x27;, [&#x27;status&#x27; =&gt; 400]);\n            }\n            return new WP_REST_Response(\n                [&#x27;validated&#x27; =&gt; true, &#x27;stored&#x27; =&gt; false],\n                200,\n                [&#x27;Cache-Control&#x27; =&gt; &#x27;no-store&#x27;]\n            );\n        },\n    ]);\n});\n<\/code><\/pre>\n<p>Ein zul\u00e4ssiger JSON-Rumpf enth\u00e4lt genau payload_hash mit 64 Hexadezimalzeichen. Zus\u00e4tzliche Felder, falsche Typen und fehlende Werte werden verworfen. Ein solcher Hash beweist weder die Herkunft noch die Echtheit einer Nutzlast. Das Beispiel validiert lediglich das Format und antwortet ausdr\u00fccklich mit stored: false. Produktive Speicherung ben\u00f6tigt au\u00dferdem ein fachliches Schema, Objektberechtigungen und bei wiederholbaren Schreibaufrufen eine belastbare Idempotenzregel.<\/p>\n<p>Der Code liest ausschlie\u00dflich den JSON-Rumpf statt gemischter URL-, Formular- und JSON-Parameter. Das 8-KiB-Limit greift hier erst nach dem Start von PHP. Eine fr\u00fchere Begrenzung im Webserver oder vorgeschalteten Dienst bleibt n\u00f6tig, wenn gro\u00dfe Anfragen bereits vor der Anwendung abgewiesen werden sollen. Die 20 isolierten Tests verwendeten kopierte WordPress-Schema- und Request-Klassen mit Ersatzfunktionen f\u00fcr Anmeldung und Hooks; eine echte HTTP- oder OAuth-Integration wurde nicht ausgef\u00fchrt.<\/p>\n<h2>Pr\u00fcfreihenfolge und Belastungsgrenzen<\/h2>\n<p>WordPress und PHP laufen bereits, bevor das REST-Argumentschema gepr\u00fcft wird. Core pr\u00fcft registrierte Argumente im normalen Dispatch vor dem permission_callback und dem eigentlichen Callback. Zus\u00e4tzliche fachliche Pr\u00fcfungen k\u00f6nnen im Callback vor der Verarbeitung erfolgen, wie im Beispiel. Das Schema verhindert daher keinen PHP-Start. Ein eigenes validate_callback muss auch Typfehler korrekt behandeln; eine Regex allein ist keine vollst\u00e4ndige Nutzlastpr\u00fcfung.<\/p>\n<p>Eine Begrenzung vor PHP kann fr\u00fche Verarbeitungskosten reduzieren. Eine anwendungsnahe Begrenzung kann nach authentifiziertem Client und teurer Operation unterscheiden. Proxys sind nicht grunds\u00e4tzlich auf IP-Adressen beschr\u00e4nkt; gemeinsam genutzte Adressen und ungepr\u00fcfte Weiterleitungsheader brauchen besondere Behandlung. Atomare Z\u00e4hler, klare Zeitfenster, ein definiertes Ausfallverhalten und passende 429-Antworten geh\u00f6ren zur Umsetzung. Keine dieser Ma\u00dfnahmen garantiert allein Schutz vor jeder \u00dcberlastung.<\/p>\n<div class=\"lw-faq\">\n<h2>Fragen und Antworten<\/h2>\n<h3>Gen\u00fcgt eine signierte Anfrage mit Zeitstempel gegen Wiederholung?<\/h3>\n<p>Ein Zeitfenster begrenzt alte Anfragen, verhindert aber keine Wiederholung innerhalb des erlaubten Fensters. Je nach Protokoll werden einmalige Kennungen mit atomarer Speicherung und Ablauf, gebundene Anfragebestandteile sowie eine fachliche Idempotenzregel ben\u00f6tigt. Geheimnisrotation und TLS bleiben wichtig. Eine Eigenkonstruktion ist nicht automatisch einfacher als ein gut unterst\u00fctztes Standardverfahren.<\/p>\n<h3>Muss \/wp\/v2\/users generell abgeschaltet werden?<\/h3>\n<p>\u00d6ffentliche Autoreninformationen und gesch\u00fctzte Kontofelder sind zu unterscheiden. Pauschales Entfernen kann Editor, Plugins oder Integrationen st\u00f6ren. Ein gezieltes Zugriffskonzept muss auch Autorenarchive und weitere \u00f6ffentliche Quellen ber\u00fccksichtigen. Unterschiedliche Login- und Anzeigenamen ersetzen weder starke Anmeldung noch Berechtigungspr\u00fcfungen.<\/p>\n<h3>Welche Fehlerf\u00e4lle geh\u00f6ren zur Abnahme?<\/h3>\n<p>Fehlende Zugangsdaten, fehlendes Recht, abgelaufene oder falsche Tokens, ung\u00fcltige Typen, \u00fcbergro\u00dfe R\u00fcmpfe, zus\u00e4tzliche Felder, wiederholte Schreibaufrufe und ein ausgefallener Token- oder Limiterspeicher. Einwilligungs- oder Zugriffstokens geh\u00f6ren nicht in \u00f6ffentliche Logs. Nach erfolgreicher Anmeldung muss auch ein Zugriff auf ein fremdes Objekt weiterhin scheitern.<\/p>\n<\/div>\n<h2>Quellen<\/h2>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/rest-api\/using-the-rest-api\/authentication\/\">WordPress: REST authentication<\/a><\/li>\n<li><a href=\"https:\/\/make.wordpress.org\/core\/2020\/11\/05\/application-passwords-integration-guide\/\">WordPress: Application Passwords<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/rest-api\/extending-the-rest-api\/adding-custom-endpoints\/\">WordPress: Custom endpoints<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_rest_server\/dispatch\/\">WordPress: REST dispatch<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_rest_server\/respond_to_request\/\">WordPress: Permission callback handling<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/rest_validate_value_from_schema\/\">WordPress: Schema validation<\/a><\/li>\n<li><a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc9700.html\">IETF RFC 9700: OAuth 2.0 security<\/a><\/li>\n<li><a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc9421.html\">IETF RFC 9421: HTTP message signatures<\/a><\/li>\n<li><a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc8725.html\">IETF RFC 8725: JWT security<\/a><\/li>\n<li><a href=\"https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/REST_Security_Cheat_Sheet.html\">OWASP: REST security<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/rest-api\/\">WordPress: REST API handbook<\/a><\/li>\n<li><a href=\"https:\/\/owasp.org\/www-project-top-ten\/\">OWASP: Top 10<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Technischer Leitfaden zur Absicherung von WordPress-REST-API-Integrationen durch OAuth-2.0-Scopes, autorisierte benutzerdefinierte Endpunkte und strikte Schema-Validierung.<\/p>\n","protected":false},"author":1,"featured_media":14104,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[150],"tags":[92274,92048,92235,92071,92277],"class_list":["post-8844","post","type-post","status-publish","format-standard","hentry","category-web-entwicklung","tag-php-de","tag-rest-api-de","tag-tutorial-de","tag-web-security-de","tag-wordpress-de"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Sichere WordPress-REST-API: OAuth 2.0 und benutzerdefinierte, autorisierte Endpunkte | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"WordPress-REST-Integrationen absichern: OAuth-Scopes, eigene Endpunkte, Berechtigungspr\u00fcfungen und Validierung des Eingabeschemas.\" \/>\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\/web-entwicklung\/sichere-wordpress-rest-api-oauth-2-0-und-benutzerdefinierte-autorisierte\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Sichere WordPress-REST-API: OAuth 2.0 und benutzerdefinierte, autorisierte Endpunkte | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"WordPress-REST-Integrationen absichern: OAuth-Scopes, eigene Endpunkte, Berechtigungspr\u00fcfungen und Validierung des Eingabeschemas.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/sichere-wordpress-rest-api-oauth-2-0-und-benutzerdefinierte-autorisierte\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-22T13:40:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-24T01:44:37+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-8844-sichere-wordpress-rest-api-oauth-eig-g.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=\"6 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\\\/web-entwicklung\\\/sichere-wordpress-rest-api-oauth-2-0-und-benutzerdefinierte-autorisierte\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/sichere-wordpress-rest-api-oauth-2-0-und-benutzerdefinierte-autorisierte\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Sichere WordPress-REST-API: OAuth 2.0 und benutzerdefinierte, autorisierte Endpunkte\",\"datePublished\":\"2026-08-22T13:40:00+00:00\",\"dateModified\":\"2026-10-24T01:44:37+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/sichere-wordpress-rest-api-oauth-2-0-und-benutzerdefinierte-autorisierte\\\/\"},\"wordCount\":899,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/sichere-wordpress-rest-api-oauth-2-0-und-benutzerdefinierte-autorisierte\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-8844-sichere-wordpress-rest-api-oauth-eig-g.png\",\"keywords\":[\"PHP\",\"REST API\",\"Tutorial\",\"Web Security\",\"WordPress\"],\"articleSection\":[\"Web Entwicklung\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/sichere-wordpress-rest-api-oauth-2-0-und-benutzerdefinierte-autorisierte\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/sichere-wordpress-rest-api-oauth-2-0-und-benutzerdefinierte-autorisierte\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/sichere-wordpress-rest-api-oauth-2-0-und-benutzerdefinierte-autorisierte\\\/\",\"name\":\"Sichere WordPress-REST-API: OAuth 2.0 und benutzerdefinierte, autorisierte Endpunkte | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/sichere-wordpress-rest-api-oauth-2-0-und-benutzerdefinierte-autorisierte\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/sichere-wordpress-rest-api-oauth-2-0-und-benutzerdefinierte-autorisierte\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-8844-sichere-wordpress-rest-api-oauth-eig-g.png\",\"datePublished\":\"2026-08-22T13:40:00+00:00\",\"dateModified\":\"2026-10-24T01:44:37+00:00\",\"description\":\"WordPress-REST-Integrationen absichern: OAuth-Scopes, eigene Endpunkte, Berechtigungspr\u00fcfungen und Validierung des Eingabeschemas.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/sichere-wordpress-rest-api-oauth-2-0-und-benutzerdefinierte-autorisierte\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/sichere-wordpress-rest-api-oauth-2-0-und-benutzerdefinierte-autorisierte\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/sichere-wordpress-rest-api-oauth-2-0-und-benutzerdefinierte-autorisierte\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-8844-sichere-wordpress-rest-api-oauth-eig-g.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-8844-sichere-wordpress-rest-api-oauth-eig-g.png\",\"width\":1200,\"height\":630,\"caption\":\"Sichere WordPress-REST-API: OAuth 2.0 und benutzerdefinierte, autorisierte Endpunkte\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/web-entwicklung\\\/sichere-wordpress-rest-api-oauth-2-0-und-benutzerdefinierte-autorisierte\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Sichere WordPress-REST-API: OAuth 2.0 und benutzerdefinierte, autorisierte Endpunkte\"}]},{\"@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":"Sichere WordPress-REST-API: OAuth 2.0 und benutzerdefinierte, autorisierte Endpunkte | Lukas Wojcik","description":"WordPress-REST-Integrationen absichern: OAuth-Scopes, eigene Endpunkte, Berechtigungspr\u00fcfungen und Validierung des Eingabeschemas.","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\/web-entwicklung\/sichere-wordpress-rest-api-oauth-2-0-und-benutzerdefinierte-autorisierte\/","og_locale":"en_US","og_type":"article","og_title":"Sichere WordPress-REST-API: OAuth 2.0 und benutzerdefinierte, autorisierte Endpunkte | Lukas Wojcik","og_description":"WordPress-REST-Integrationen absichern: OAuth-Scopes, eigene Endpunkte, Berechtigungspr\u00fcfungen und Validierung des Eingabeschemas.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/sichere-wordpress-rest-api-oauth-2-0-und-benutzerdefinierte-autorisierte\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-08-22T13:40:00+00:00","article_modified_time":"2026-10-24T01:44:37+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-8844-sichere-wordpress-rest-api-oauth-eig-g.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/sichere-wordpress-rest-api-oauth-2-0-und-benutzerdefinierte-autorisierte\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/sichere-wordpress-rest-api-oauth-2-0-und-benutzerdefinierte-autorisierte\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Sichere WordPress-REST-API: OAuth 2.0 und benutzerdefinierte, autorisierte Endpunkte","datePublished":"2026-08-22T13:40:00+00:00","dateModified":"2026-10-24T01:44:37+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/sichere-wordpress-rest-api-oauth-2-0-und-benutzerdefinierte-autorisierte\/"},"wordCount":899,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/sichere-wordpress-rest-api-oauth-2-0-und-benutzerdefinierte-autorisierte\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-8844-sichere-wordpress-rest-api-oauth-eig-g.png","keywords":["PHP","REST API","Tutorial","Web Security","WordPress"],"articleSection":["Web Entwicklung"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/sichere-wordpress-rest-api-oauth-2-0-und-benutzerdefinierte-autorisierte\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/sichere-wordpress-rest-api-oauth-2-0-und-benutzerdefinierte-autorisierte\/","url":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/sichere-wordpress-rest-api-oauth-2-0-und-benutzerdefinierte-autorisierte\/","name":"Sichere WordPress-REST-API: OAuth 2.0 und benutzerdefinierte, autorisierte Endpunkte | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/sichere-wordpress-rest-api-oauth-2-0-und-benutzerdefinierte-autorisierte\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/sichere-wordpress-rest-api-oauth-2-0-und-benutzerdefinierte-autorisierte\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-8844-sichere-wordpress-rest-api-oauth-eig-g.png","datePublished":"2026-08-22T13:40:00+00:00","dateModified":"2026-10-24T01:44:37+00:00","description":"WordPress-REST-Integrationen absichern: OAuth-Scopes, eigene Endpunkte, Berechtigungspr\u00fcfungen und Validierung des Eingabeschemas.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/sichere-wordpress-rest-api-oauth-2-0-und-benutzerdefinierte-autorisierte\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/sichere-wordpress-rest-api-oauth-2-0-und-benutzerdefinierte-autorisierte\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/sichere-wordpress-rest-api-oauth-2-0-und-benutzerdefinierte-autorisierte\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-8844-sichere-wordpress-rest-api-oauth-eig-g.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-8844-sichere-wordpress-rest-api-oauth-eig-g.png","width":1200,"height":630,"caption":"Sichere WordPress-REST-API: OAuth 2.0 und benutzerdefinierte, autorisierte Endpunkte"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/web-entwicklung\/sichere-wordpress-rest-api-oauth-2-0-und-benutzerdefinierte-autorisierte\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Sichere WordPress-REST-API: OAuth 2.0 und benutzerdefinierte, autorisierte Endpunkte"}]},{"@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\/8844","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=8844"}],"version-history":[{"count":6,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/8844\/revisions"}],"predecessor-version":[{"id":23428,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/8844\/revisions\/23428"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/14104"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=8844"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=8844"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=8844"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}