{"id":32989,"date":"2024-11-01T09:12:57","date_gmt":"2024-11-01T09:12:57","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=32989"},"modified":"2024-11-01T11:29:28","modified_gmt":"2024-11-01T11:29:28","slug":"spring-boot-backend-development-course-implementing-login-and-logout-with-jwt-adding-dependencies","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/32989\/","title":{"rendered":"Spring Boot Backend Development Course, Implementing Login and Logout with JWT, Adding Dependencies"},"content":{"rendered":"<div class=\"post\">\n<p>Hello! In this blog post, we will take a detailed look at how to implement login and logout functionalities using JSON Web Token (JWT) in the backend development process with Spring Boot. Authentication and authorization are crucial elements in web application development, and JWT helps to manage them effectively. In this tutorial, we will explain the concept of JWT, Spring Boot configuration, how to add dependencies, and more step by step.<\/p>\n<h2>1. What is JWT?<\/h2>\n<p>JWT stands for JSON Web Token, a standard for securely transmitting user authentication information. JWT consists of three parts:<\/p>\n<ul>\n<li><strong>Header:<\/strong> Contains information about the type of token and the hashing algorithm used.<\/li>\n<li><strong>Payload:<\/strong> Includes claims such as user information. This claim can contain public information (information needed for API calls).<\/li>\n<li><strong>Signature:<\/strong> A signature created using a secret key based on the header and payload information. This ensures the integrity of the data and is used to verify if someone has forged the token.<\/li>\n<\/ul>\n<p>The greatest advantage of JWT is its stateless property. As there is no need for the server to maintain session state, it provides excellent scalability and performance.<\/p>\n<h2>2. Creating a Spring Boot Project<\/h2>\n<p>Let&#8217;s create a new project using Spring Boot. First, visit Spring Initializr (https:\/\/start.spring.io\/). Apply the following settings to create the project:<\/p>\n<ul>\n<li><strong>Project:<\/strong> Maven Project<\/li>\n<li><strong>Language:<\/strong> Java<\/li>\n<li><strong>Spring Boot:<\/strong> 2.6.0 (select the latest version)<\/li>\n<li><strong>Group:<\/strong> com.example<\/li>\n<li><strong>Artifact:<\/strong> jwt-demo<\/li>\n<li><strong>Dependencies:<\/strong> Spring Web, Spring Security, Spring Data JPA, H2 Database<\/li>\n<\/ul>\n<p>After creating the project, open it in your IDE and set up the necessary directory structure.<\/p>\n<h2>3. Adding Dependencies<\/h2>\n<p>First, add the required dependencies to the <code>pom.xml<\/code> file:<\/p>\n<pre><code>&lt;dependency&gt;\n    &lt;groupId&gt;io.jsonwebtoken&lt;\/groupId&gt;\n    &lt;artifactId&gt;jwt&lt;\/artifactId&gt;\n    &lt;version&gt;0.9.1&lt;\/version&gt;\n&lt;\/dependency&gt;<\/code><\/pre>\n<p>Additionally, Spring Security and Data JPA are already included, so no extra dependencies are needed. The H2 database can be useful for development and testing environments.<\/p>\n<h2>4. Configuring Spring Security<\/h2>\n<p>We need to configure Spring Security to use JWT. First, create the <code>SecurityConfig<\/code> class:<\/p>\n<pre><code>import org.springframework.context.annotation.Bean;\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 SecurityConfig extends WebSecurityConfigurerAdapter {\n\n    @Override\n    protected void configure(HttpSecurity http) throws Exception {\n        http.csrf().disable()\n            .authorizeRequests().antMatchers(\"\/api\/auth\/**\").permitAll()\n            .anyRequest().authenticated();\n    }\n}<\/code><\/pre>\n<p>In the above configuration, all users can access the <code>\/api\/auth\/**<\/code> path. All other requests require authentication.<\/p>\n<h2>5. Generating and Validating JWT<\/h2>\n<p>Let&#8217;s write a class to generate and validate JWT. Define the necessary methods here:<\/p>\n<pre><code>import io.jsonwebtoken.Claims;\nimport io.jsonwebtoken.Jwts;\nimport io.jsonwebtoken.SignatureAlgorithm;\nimport org.springframework.stereotype.Service;\n\nimport java.util.Date;\n\n@Service\npublic class JwtUtil {\n\n    private String secretKey = \"YourSecretKey\"; \/\/ The secret key should be managed securely and not exposed\n\n    public String generateToken(String username) {\n        return Jwts.builder()\n                .setSubject(username)\n                .setIssuedAt(new Date(System.currentTimeMillis()))\n                .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 10)) \/\/ 10 hours\n                .signWith(SignatureAlgorithm.HS256, secretKey)\n                .compact();\n    }\n\n    public boolean validateToken(String token, String username) {\n        final String extractedUsername = extractUsername(token);\n        return (extractedUsername.equals(username) && !isExpired(token));\n    }\n\n    public String extractUsername(String token) {\n        return extractAllClaims(token).getSubject();\n    }\n\n    private Claims extractAllClaims(String token) {\n        return Jwts.parser().setSigningKey(secretKey).parseClaimsJws(token).getBody();\n    }\n\n    private boolean isExpired(String token) {\n        return extractAllClaims(token).getExpiration().before(new Date());\n    }\n}<\/code><\/pre>\n<p>The above <code>JwtUtil<\/code> class contains methods for token generation, validation, and username extraction.<\/p>\n<h2>6. Implementing Authentication and Logout<\/h2>\n<p>Now let&#8217;s write a controller to handle authentication and logout. Create the <code>AuthController<\/code> class:<\/p>\n<pre><code>import org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.web.bind.annotation.*;\n\n@RestController\n@RequestMapping(\"\/api\/auth\")\npublic class AuthController {\n\n    @Autowired\n    private JwtUtil jwtUtil;\n\n    @PostMapping(\"\/login\")\n    public ResponseEntity<String> login(@RequestBody AuthRequest authRequest) {\n        \/\/ Add user authentication logic here\n        String token = jwtUtil.generateToken(authRequest.getUsername());\n        return ResponseEntity.ok(token);\n    }\n\n    @PostMapping(\"\/logout\")\n    public ResponseEntity<String> logout() {\n        \/\/ Add logic to blacklist JWT, etc.\n        return ResponseEntity.ok(\"Logout successful\");\n    }\n}<\/code><\/pre>\n<p>In the above code, <code>AuthRequest<\/code> is a DTO class that contains the username and password, and the user authentication logic should be implemented in detail. Typically, it checks the authentication information in the database.<\/p>\n<h2>7. Final Testing<\/h2>\n<p>Now that we have completed all the configurations, you can test the API using a tool like Postman:<\/p>\n<ul>\n<li><strong>Login:<\/strong> <code>POST \/api\/auth\/login<\/code><\/li>\n<li><strong>Logout:<\/strong> <code>POST \/api\/auth\/logout<\/code><\/li>\n<\/ul>\n<p>By passing the username and password in the request body of the login API, you will successfully receive a JWT in return. The returned JWT should be included in the <code>Authorization<\/code> header for subsequent API calls.<\/p>\n<h2>8. Conclusion<\/h2>\n<p>We explored the implementation of login and logout functionalities based on JWT using Spring Boot. Authentication and authorization are crucial aspects of web application development, and JWT helps manage these conveniently and securely. Additional features to consider include handling JWT blacklist and implementing refresh tokens.<\/p>\n<p>I hope this tutorial has been helpful for your Spring Boot backend development. For more information and resources, you can check the official documentation and community. Thank you!<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Hello! In this blog post, we will take a detailed look at how to implement login and logout functionalities using JSON Web Token (JWT) in the backend development process with Spring Boot. Authentication and authorization are crucial elements in web application development, and JWT helps to manage them effectively. In this tutorial, we will explain &hellip; <a href=\"https:\/\/atmokpo.com\/w\/32989\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Spring Boot Backend Development Course, Implementing Login and Logout with JWT, Adding Dependencies&#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-32989","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 JWT, Adding Dependencies - \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\/32989\/\" \/>\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 JWT, Adding Dependencies - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"Hello! In this blog post, we will take a detailed look at how to implement login and logout functionalities using JSON Web Token (JWT) in the backend development process with Spring Boot. Authentication and authorization are crucial elements in web application development, and JWT helps to manage them effectively. In this tutorial, we will explain &hellip; \ub354 \ubcf4\uae30 &quot;Spring Boot Backend Development Course, Implementing Login and Logout with JWT, Adding Dependencies&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/32989\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:12:57+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:29:28+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\/32989\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/32989\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"Spring Boot Backend Development Course, Implementing Login and Logout with JWT, Adding Dependencies\",\"datePublished\":\"2024-11-01T09:12:57+00:00\",\"dateModified\":\"2024-11-01T11:29:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/32989\/\"},\"wordCount\":549,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"Spring Boot backend development\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/32989\/\",\"url\":\"https:\/\/atmokpo.com\/w\/32989\/\",\"name\":\"Spring Boot Backend Development Course, Implementing Login and Logout with JWT, Adding Dependencies - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:12:57+00:00\",\"dateModified\":\"2024-11-01T11:29:28+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/32989\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/32989\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/32989\/#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 JWT, Adding Dependencies\"}]},{\"@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 JWT, Adding Dependencies - \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\/32989\/","og_locale":"ko_KR","og_type":"article","og_title":"Spring Boot Backend Development Course, Implementing Login and Logout with JWT, Adding Dependencies - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"Hello! In this blog post, we will take a detailed look at how to implement login and logout functionalities using JSON Web Token (JWT) in the backend development process with Spring Boot. Authentication and authorization are crucial elements in web application development, and JWT helps to manage them effectively. In this tutorial, we will explain &hellip; \ub354 \ubcf4\uae30 \"Spring Boot Backend Development Course, Implementing Login and Logout with JWT, Adding Dependencies\"","og_url":"https:\/\/atmokpo.com\/w\/32989\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:12:57+00:00","article_modified_time":"2024-11-01T11:29:28+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\/32989\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/32989\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"Spring Boot Backend Development Course, Implementing Login and Logout with JWT, Adding Dependencies","datePublished":"2024-11-01T09:12:57+00:00","dateModified":"2024-11-01T11:29:28+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/32989\/"},"wordCount":549,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["Spring Boot backend development"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/32989\/","url":"https:\/\/atmokpo.com\/w\/32989\/","name":"Spring Boot Backend Development Course, Implementing Login and Logout with JWT, Adding Dependencies - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:12:57+00:00","dateModified":"2024-11-01T11:29:28+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/32989\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/32989\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/32989\/#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 JWT, Adding Dependencies"}]},{"@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\/32989","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=32989"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/32989\/revisions"}],"predecessor-version":[{"id":32990,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/32989\/revisions\/32990"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=32989"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=32989"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=32989"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}