{"id":32997,"date":"2024-11-01T09:13:01","date_gmt":"2024-11-01T09:13:01","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=32997"},"modified":"2024-11-01T11:29:26","modified_gmt":"2024-11-01T11:29:26","slug":"spring-boot-backend-development-course-implementing-login-and-logout-with-jwt-adding-token-service","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/32997\/","title":{"rendered":"Spring Boot Backend Development Course, Implementing Login and Logout with JWT, Adding Token Service"},"content":{"rendered":"<p><body><\/p>\n<p>Spring Boot is a powerful framework for modern web application development. In this course, we will explain step by step how to implement user authentication using JWT (Json Web Token) and how to achieve login and logout functionality. This process will also cover how to add token services to enhance security and user management features.<\/p>\n<h2>1. What is JWT?<\/h2>\n<p>JWT is an open standard based on JSON that provides a way to securely transmit information. A JWT consists of three parts: Header, Payload, Signature.<\/p>\n<h3>1.1 Header<\/h3>\n<p>The Header specifies the type of the JWT and the hashing algorithm. For example:<\/p>\n<pre>\n    {\n      \"alg\": \"HS256\",\n      \"typ\": \"JWT\"\n    }<\/pre>\n<h3>1.2 Payload<\/h3>\n<p>The Payload contains the user&#8217;s information, user ID, expiration time, etc. This part is structured in an easily readable JSON format.<\/p>\n<h3>1.3 Signature<\/h3>\n<p>The Signature is the value signed with a secret key by combining the encoded Header and Payload. This value guarantees the integrity of the token and is used by the server to validate the token.<\/p>\n<h2>2. Project Setup<\/h2>\n<p>In this tutorial, we will create a project using Spring Boot and Maven. You can set up the project using IDEs such as IntelliJ IDEA or Eclipse.<\/p>\n<h3>2.1 Creating a Maven Project<\/h3>\n<p>After creating a Maven project in Eclipse or IntelliJ IDEA, add the following dependencies to the pom.xml file.<\/p>\n<pre>\n    &lt;dependencies&gt;\n        &lt;dependency&gt;\n            &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\n            &lt;artifactId&gt;spring-boot-starter-web&lt;\/artifactId&gt;\n        &lt;\/dependency&gt;\n        &lt;dependency&gt;\n            &lt;groupId&gt;io.jsonwebtoken&lt;\/groupId&gt;\n            &lt;artifactId&gt;jjsonwebtoken&lt;\/artifactId&gt;\n            &lt;version&gt;0.9.1&lt;\/version&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    &lt;\/dependencies&gt;<\/pre>\n<h3>2.2 Spring Security Configuration<\/h3>\n<p>Set up basic security configurations using Spring Security. Create a SecurityConfig class and add user authentication and authorization settings.<\/p>\n<pre>\n    import org.springframework.context.annotation.Bean;\n    import org.springframework.context.annotation.Configuration;\n    import org.springframework.security.config.annotation.web.builders.HttpSecurity;\n    import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;\n    import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;\n\n    @Configuration\n    @EnableWebSecurity\n    public class SecurityConfig extends WebSecurityConfigurerAdapter {\n\n        @Override\n        protected void configure(HttpSecurity http) throws Exception {\n            http.csrf().disable()\n                .authorizeRequests()\n                .antMatchers(\"\/api\/auth\/**\").permitAll()\n                .anyRequest().authenticated();\n        }\n    }\n    <\/pre>\n<h2>3. JWT Creation and Validation<\/h2>\n<p>Now we will look at how to create and validate JWTs. Create a JWTUtil class and implement the necessary methods.<\/p>\n<pre>\n    import io.jsonwebtoken.Claims;\n    import io.jsonwebtoken.Jwts;\n    import io.jsonwebtoken.SignatureAlgorithm;\n    import org.springframework.stereotype.Component;\n\n    import java.util.Date;\n    import java.util.HashMap;\n    import java.util.Map;\n\n    @Component\n    public class JWTUtil {\n        private String secretKey = \"secret\";\n\n        public String generateToken(String username) {\n            Map&lt;String, Object&gt; claims = new HashMap&lt;&gt;();\n            return createToken(claims, username);\n        }\n\n        private String createToken(Map&lt;String, Object&gt; claims, String subject) {\n            return Jwts.builder()\n                    .setClaims(claims)\n                    .setSubject(subject)\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) &amp;&amp; !isTokenExpired(token));\n        }\n\n        private 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 isTokenExpired(String token) {\n            return extractAllClaims(token).getExpiration().before(new Date());\n        }\n    }\n    <\/pre>\n<h2>4. Implementing User Authentication and Login API<\/h2>\n<p>Now it&#8217;s time to implement the user authentication and login API. Create an AuthController class and add the necessary methods.<\/p>\n<pre>\n    import org.springframework.beans.factory.annotation.Autowired;\n    import org.springframework.http.ResponseEntity;\n    import org.springframework.security.authentication.AuthenticationManager;\n    import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;\n    import org.springframework.web.bind.annotation.*;\n\n    @RestController\n    @RequestMapping(\"\/api\/auth\")\n    public class AuthController {\n\n        @Autowired\n        private AuthenticationManager authenticationManager;\n\n        @Autowired\n        private JWTUtil jwtUtil;\n\n        @PostMapping(\"\/login\")\n        public ResponseEntity&lt;String&gt; login(@RequestBody AuthRequest authRequest) {\n            authenticationManager.authenticate(\n                    new UsernamePasswordAuthenticationToken(authRequest.getUsername(), authRequest.getPassword())\n            );\n            final String token = jwtUtil.generateToken(authRequest.getUsername());\n            return ResponseEntity.ok(token);\n        }\n    }\n\n    class AuthRequest {\n        private String username;\n        private String password;\n\n        \/\/ getters and setters\n    }\n    <\/pre>\n<h2>5. Implementing Logout API<\/h2>\n<p>The logout API is implemented by deleting the JWT token on the client side. A separate logout API is not required, but an example can be added for this part.<\/p>\n<h2>6. Adding Token Service<\/h2>\n<p>By adding a token service, manage user information and implement functionality to manage user sessions as needed. Create a TokenService class to implement this functionality.<\/p>\n<pre>\n    import org.springframework.stereotype.Service;\n\n    @Service\n    public class TokenService {\n\n        @Autowired\n        private JWTUtil jwtUtil;\n\n        public String refreshToken(String token) {\n            if (jwtUtil.isTokenExpired(token)) {\n                String username = jwtUtil.extractUsername(token);\n                return jwtUtil.generateToken(username);\n            }\n            return token;\n        }\n    }\n    <\/pre>\n<h2>7. Other Considerations and Conclusion<\/h2>\n<p>In this course, we explored how to implement login and logout functionality using JWT and add a token service for user authentication. In real applications, additional security measures such as enhancing JWT validation, user permission management, and token storage implementation are required.<\/p>\n<h2>8. Conclusion<\/h2>\n<p>Implementing a JWT-based authentication system using Spring Boot has become an essential element in enhancing the security of modern web applications. Through this course, you should understand the basic concepts of JWT and the fundamentals of implementing an authentication system using it. Furthermore, try to gain experience in implementing and optimizing various features required for actual projects.<\/p>\n<p>I hope this course helps you with your Spring Boot backend development!<\/p>\n<footer>\n<p>\u00a9 2023 Your Blog Name. All rights reserved.<\/p>\n<\/footer>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Spring Boot is a powerful framework for modern web application development. In this course, we will explain step by step how to implement user authentication using JWT (Json Web Token) and how to achieve login and logout functionality. This process will also cover how to add token services to enhance security and user management features. &hellip; <a href=\"https:\/\/atmokpo.com\/w\/32997\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Spring Boot Backend Development Course, Implementing Login and Logout with JWT, Adding Token Service&#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-32997","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 Token Service - \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\/32997\/\" \/>\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 Token Service - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"Spring Boot is a powerful framework for modern web application development. In this course, we will explain step by step how to implement user authentication using JWT (Json Web Token) and how to achieve login and logout functionality. This process will also cover how to add token services to enhance security and user management features. &hellip; \ub354 \ubcf4\uae30 &quot;Spring Boot Backend Development Course, Implementing Login and Logout with JWT, Adding Token Service&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/32997\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:13:01+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:29:26+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\/32997\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/32997\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"Spring Boot Backend Development Course, Implementing Login and Logout with JWT, Adding Token Service\",\"datePublished\":\"2024-11-01T09:13:01+00:00\",\"dateModified\":\"2024-11-01T11:29:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/32997\/\"},\"wordCount\":479,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"Spring Boot backend development\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/32997\/\",\"url\":\"https:\/\/atmokpo.com\/w\/32997\/\",\"name\":\"Spring Boot Backend Development Course, Implementing Login and Logout with JWT, Adding Token Service - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:13:01+00:00\",\"dateModified\":\"2024-11-01T11:29:26+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/32997\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/32997\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/32997\/#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 Token Service\"}]},{\"@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 Token Service - \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\/32997\/","og_locale":"ko_KR","og_type":"article","og_title":"Spring Boot Backend Development Course, Implementing Login and Logout with JWT, Adding Token Service - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"Spring Boot is a powerful framework for modern web application development. In this course, we will explain step by step how to implement user authentication using JWT (Json Web Token) and how to achieve login and logout functionality. This process will also cover how to add token services to enhance security and user management features. &hellip; \ub354 \ubcf4\uae30 \"Spring Boot Backend Development Course, Implementing Login and Logout with JWT, Adding Token Service\"","og_url":"https:\/\/atmokpo.com\/w\/32997\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:13:01+00:00","article_modified_time":"2024-11-01T11:29:26+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\/32997\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/32997\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"Spring Boot Backend Development Course, Implementing Login and Logout with JWT, Adding Token Service","datePublished":"2024-11-01T09:13:01+00:00","dateModified":"2024-11-01T11:29:26+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/32997\/"},"wordCount":479,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["Spring Boot backend development"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/32997\/","url":"https:\/\/atmokpo.com\/w\/32997\/","name":"Spring Boot Backend Development Course, Implementing Login and Logout with JWT, Adding Token Service - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:13:01+00:00","dateModified":"2024-11-01T11:29:26+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/32997\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/32997\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/32997\/#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 Token Service"}]},{"@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\/32997","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=32997"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/32997\/revisions"}],"predecessor-version":[{"id":32998,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/32997\/revisions\/32998"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=32997"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=32997"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=32997"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}