{"id":33017,"date":"2024-11-01T09:13:08","date_gmt":"2024-11-01T09:13:08","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=33017"},"modified":"2024-11-01T11:29:20","modified_gmt":"2024-11-01T11:29:20","slug":"spring-boot-backend-development-course-implementing-login-and-logout-with-oauth2-what-is-authorization-code-grant-type","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/33017\/","title":{"rendered":"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, What is Authorization Code Grant Type"},"content":{"rendered":"<p><body><\/p>\n<p>In modern web applications, security and user authentication are very important elements. In particular, there are many cases where user authentication needs to be conducted through various methods such as social login and API integration. One of the commonly used protocols in this context is <strong>OAuth2<\/strong>. In this course, we will implement login and logout functionality using OAuth2 with Spring Boot and learn more about the authorization code grant type.<\/p>\n<h2>1. What is OAuth2?<\/h2>\n<p>OAuth2 is a popular authentication protocol that allows internet users to permit third-party applications to access their information without sharing their passwords. It enables delegated access so that applications can securely access user information.<\/p>\n<h2>2. Understanding the OAuth2 Process<\/h2>\n<p>The main OAuth2 process is divided into the following steps:<\/p>\n<ul>\n<li><strong>1) Client Registration<\/strong>: The client application registers with the OAuth provider and is issued a unique client ID and secret key.<\/li>\n<li><strong>2) Authentication Request<\/strong>: When the user clicks the authentication button in the client application, the authentication request is sent to the OAuth server.<\/li>\n<li><strong>3) User Authentication<\/strong>: The OAuth server prompts the user to perform authentication and displays a consent screen.<\/li>\n<li><strong>4) Issuing Authorization Code<\/strong>: If the user grants permission, the OAuth server returns an authorization code to the client.<\/li>\n<li><strong>5) Issuing Access Token<\/strong>: The client uses the authorization code to request an access token.<\/li>\n<li><strong>6) API Access<\/strong>: The client uses the access token to access the API and retrieve user data.<\/li>\n<\/ul>\n<h2>3. Configuring OAuth2 in Spring Boot<\/h2>\n<p>The process of configuring OAuth2 using Spring Boot involves adding the necessary dependencies first.<\/p>\n<pre><code>pom.xml\n&lt;dependency&gt;\n    &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\n    &lt;artifactId&gt;spring-boot-starter-oauth2-client&lt;\/artifactId&gt;\n&lt;\/dependency&gt;\n&lt;dependency&gt;\n    &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\n    &lt;artifactId&gt;spring-boot-starter-security&lt;\/artifactId&gt;\n&lt;\/dependency&gt;\n    <\/code><\/pre>\n<h3>3.1. Configuring application.yml<\/h3>\n<p>Add the information of the OAuth2 authentication provider and the client information to the configuration file. Typically, information for social login providers such as Google is set here.<\/p>\n<pre><code>application.yml\nspring:\n  security:\n    oauth2:\n      client:\n        registration:\n          google:\n            client-id: YOUR_CLIENT_ID\n            client-secret: YOUR_CLIENT_SECRET\n            scope: profile, email\n            redirect-uri: \"{baseUrl}\/login\/oauth2\/code\/{registrationId}\"\n        provider:\n          google:\n            authorization-uri: https:\/\/accounts.google.com\/o\/oauth2\/auth\n            token-uri: https:\/\/oauth2.googleapis.com\/token\n            user-info-uri: https:\/\/www.googleapis.com\/userinfo\n            user-name-attribute: sub\n    <\/code><\/pre>\n<h3>3.2. Security Configuration<\/h3>\n<p>Use Spring Security to apply security configuration.<\/p>\n<pre><code>WebSecurityConfig.java\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.security.config.annotation.web.builders.HttpSecurity;\nimport org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;\nimport org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;\n\n@Configuration\n@EnableWebSecurity\npublic class WebSecurityConfig extends WebSecurityConfigurerAdapter {\n    @Override\n    protected void configure(HttpSecurity http) throws Exception {\n        http\n            .authorizeRequests()\n            .antMatchers(\"\/\", \"\/login\").permitAll() \/\/ Allow all users to access \/ and \/login\n            .anyRequest().authenticated() \/\/ All other requests require authentication\n            .and()\n            .oauth2Login(); \/\/ Support OAuth2 login\n    }\n}\n    <\/code><\/pre>\n<h2>4. Handling Login and Logout<\/h2>\n<p>Now, we can implement basic login and logout functionality. When a user accesses the \/login URL, authentication is attempted through the OAuth2 provider. Upon successful authentication, the user is redirected to the main dashboard.<\/p>\n<h3>4.1. Login Page<\/h3>\n<p>Let&#8217;s create a simple login page that includes an authentication button.<\/p>\n<pre><code>login.html\n&lt;html&gt;\n&lt;head&gt;\n  &lt;title&gt;Login Page&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n  &lt;h1&gt;Login&lt;\/h1&gt;\n  &lt;a href=\"\/oauth2\/authorization\/google\"&gt;Login with Google&lt;\/a&gt; \n&lt;\/body&gt;\n&lt;\/html&gt;\n    <\/code><\/pre>\n<h3>4.2. Logout<\/h3>\n<p>Additional configuration is required for logout handling.<\/p>\n<pre><code>WebSecurityConfig.java\n@Override\nprotected void configure(HttpSecurity http) throws Exception {\n    http\n        .authorizeRequests()\n        .antMatchers(\"\/\", \"\/login\", \"\/logout\").permitAll()\n        .anyRequest().authenticated()\n        .and()\n        .oauth2Login()\n        .and()\n        .logout()\n        .logoutSuccessUrl(\"\/\"); \/\/ Redirect to home after logout\n}\n    <\/code><\/pre>\n<h2>5. What is the Authorization Code Grant Type?<\/h2>\n<p>OAuth2 offers several grant types, and one of the most popular methods is the <strong>Authorization Code Grant<\/strong>.<\/p>\n<h3>5.1. Explanation of the Authorization Code Grant Type<\/h3>\n<p>The authorization code grant typically follows these steps:<\/p>\n<ul>\n<li>The user clicks the login button in the client application.<\/li>\n<li>The client application redirects the user to the OAuth2 server&#8217;s authentication screen.<\/li>\n<li>The user enters authentication information and submits it to the OAuth2 server.<\/li>\n<li>The OAuth2 server returns an authorization code to the client upon user authentication.<\/li>\n<\/ul>\n<h3>5.2. Advantages of the Authorization Code Grant<\/h3>\n<p>The main advantages of the authorization code grant are as follows:<\/p>\n<ul>\n<li>High security level: The authorization code is stored only on the server with the client secret, making communication with the resource server more secure.<\/li>\n<li>Support for refresh tokens: Access tokens can be refreshed using refresh tokens once they expire.<\/li>\n<\/ul>\n<h2>6. Conclusion<\/h2>\n<p>In this course, we have learned how to implement login and logout functionality using OAuth2 with Spring Boot, as well as the authorization code grant type. OAuth2 is an essential protocol for authentication and authorization in modern web applications, providing security and user convenience. By combining various authentication methods based on user needs, more secure and convenient services can be created.<\/p>\n<h2>Recommended Resources<\/h2>\n<ul>\n<li><a href=\"https:\/\/spring.io\/projects\/spring-security\">Official Spring Security Documentation<\/a><\/li>\n<li><a href=\"https:\/\/oauth.net\/2\/\">Official OAuth 2.0 Documentation<\/a><\/li>\n<li><a href=\"https:\/\/www.baeldung.com\/spring-security-oauth\">Baeldung&#8217;s OAuth2 Course<\/a><\/li>\n<\/ul>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In modern web applications, security and user authentication are very important elements. In particular, there are many cases where user authentication needs to be conducted through various methods such as social login and API integration. One of the commonly used protocols in this context is OAuth2. In this course, we will implement login and logout &hellip; <a href=\"https:\/\/atmokpo.com\/w\/33017\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, What is Authorization Code Grant Type&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[131],"tags":[],"class_list":["post-33017","post","type-post","status-publish","format-standard","hentry","category-spring-boot-backend-development"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, What is Authorization Code Grant Type - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/atmokpo.com\/w\/33017\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, What is Authorization Code Grant Type - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"In modern web applications, security and user authentication are very important elements. In particular, there are many cases where user authentication needs to be conducted through various methods such as social login and API integration. One of the commonly used protocols in this context is OAuth2. In this course, we will implement login and logout &hellip; \ub354 \ubcf4\uae30 &quot;Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, What is Authorization Code Grant Type&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/33017\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:13:08+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:29:20+00:00\" \/>\n<meta name=\"author\" content=\"root\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:site\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:label1\" content=\"\uae00\uc4f4\uc774\" \/>\n\t<meta name=\"twitter:data1\" content=\"root\" \/>\n\t<meta name=\"twitter:label2\" content=\"\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04\" \/>\n\t<meta name=\"twitter:data2\" content=\"4\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/atmokpo.com\/w\/33017\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33017\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, What is Authorization Code Grant Type\",\"datePublished\":\"2024-11-01T09:13:08+00:00\",\"dateModified\":\"2024-11-01T11:29:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33017\/\"},\"wordCount\":581,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"Spring Boot backend development\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/33017\/\",\"url\":\"https:\/\/atmokpo.com\/w\/33017\/\",\"name\":\"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, What is Authorization Code Grant Type - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:13:08+00:00\",\"dateModified\":\"2024-11-01T11:29:20+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33017\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/33017\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/33017\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, What is Authorization Code Grant Type\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/atmokpo.com\/w\/#website\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/atmokpo.com\/w\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"contentUrl\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"width\":400,\"height\":400,\"caption\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\"},\"image\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/bebubo4\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\",\"name\":\"root\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"caption\":\"root\"},\"sameAs\":[\"http:\/\/atmokpo.com\/w\"],\"url\":\"https:\/\/atmokpo.com\/w\/author\/root\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, What is Authorization Code Grant Type - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","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:\/\/atmokpo.com\/w\/33017\/","og_locale":"ko_KR","og_type":"article","og_title":"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, What is Authorization Code Grant Type - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"In modern web applications, security and user authentication are very important elements. In particular, there are many cases where user authentication needs to be conducted through various methods such as social login and API integration. One of the commonly used protocols in this context is OAuth2. In this course, we will implement login and logout &hellip; \ub354 \ubcf4\uae30 \"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, What is Authorization Code Grant Type\"","og_url":"https:\/\/atmokpo.com\/w\/33017\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:13:08+00:00","article_modified_time":"2024-11-01T11:29:20+00:00","author":"root","twitter_card":"summary_large_image","twitter_creator":"@bebubo4","twitter_site":"@bebubo4","twitter_misc":{"\uae00\uc4f4\uc774":"root","\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04":"4\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/atmokpo.com\/w\/33017\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/33017\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, What is Authorization Code Grant Type","datePublished":"2024-11-01T09:13:08+00:00","dateModified":"2024-11-01T11:29:20+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/33017\/"},"wordCount":581,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["Spring Boot backend development"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/33017\/","url":"https:\/\/atmokpo.com\/w\/33017\/","name":"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, What is Authorization Code Grant Type - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:13:08+00:00","dateModified":"2024-11-01T11:29:20+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/33017\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/33017\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/33017\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, What is Authorization Code Grant Type"}]},{"@type":"WebSite","@id":"https:\/\/atmokpo.com\/w\/#website","url":"https:\/\/atmokpo.com\/w\/","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","description":"","publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/atmokpo.com\/w\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/atmokpo.com\/w\/#organization","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","url":"https:\/\/atmokpo.com\/w\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/","url":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","contentUrl":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","width":400,"height":400,"caption":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8"},"image":{"@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/bebubo4"]},{"@type":"Person","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7","name":"root","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","caption":"root"},"sameAs":["http:\/\/atmokpo.com\/w"],"url":"https:\/\/atmokpo.com\/w\/author\/root\/"}]}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33017","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/comments?post=33017"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33017\/revisions"}],"predecessor-version":[{"id":33018,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33017\/revisions\/33018"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=33017"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=33017"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=33017"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}