{"id":33015,"date":"2024-11-01T09:13:08","date_gmt":"2024-11-01T09:13:08","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=33015"},"modified":"2024-11-01T11:29:19","modified_gmt":"2024-11-01T11:29:19","slug":"spring-boot-backend-development-course-implementing-login-and-logout-with-oauth2-what-is-oauth","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/33015\/","title":{"rendered":"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, What is OAuth"},"content":{"rendered":"<p><body><\/p>\n<p>Hello! In this blog post, we will learn how to implement secure login and logout features using OAuth 2.0 with Spring Boot. We will start by understanding what OAuth is and its basic concepts, followed by a detailed look at how to use OAuth2 in Spring Boot through practical code examples.<\/p>\n<h2>1. What is OAuth?<\/h2>\n<p>OAuth (Open Authorization) is an authentication protocol that allows users to securely share their information with a third-party service. For example, when a user wants to share their information from Service A with Service B, they can grant access to Service B without directly providing their login credentials from Service A.<\/p>\n<h3>1.1 Background of OAuth<\/h3>\n<p>In the past, users had to manage separate login credentials for each service they subscribed to. This could lead to security issues and created a cumbersome experience for users. OAuth was designed to address these problems by enabling more secure sharing of information through token-based authentication and authorization.<\/p>\n<h3>1.2 How OAuth Works<\/h3>\n<p>OAuth generally operates through the following process:<\/p>\n<ul>\n<li><strong>Authentication Request:<\/strong> The client sends a request to access the resource server on behalf of the user.<\/li>\n<li><strong>User Authentication:<\/strong> A login screen is displayed to the user, who then enters their authentication information.<\/li>\n<li><strong>Token Issuance:<\/strong> Upon successful user authentication, the authorization server issues an access token to the client.<\/li>\n<li><strong>Resource Request:<\/strong> The client uses the issued token to send a request to the resource server.<\/li>\n<\/ul>\n<h2>2. Key Components of OAuth 2.0<\/h2>\n<p>OAuth 2.0 consists of the following components:<\/p>\n<ul>\n<li><strong>Client:<\/strong> The application requesting access to the resource.<\/li>\n<li><strong>Resource Server:<\/strong> The server hosting the protected data.<\/li>\n<li><strong>Authorization Server:<\/strong> The server that issues authentication tokens to the client.<\/li>\n<li><strong>User:<\/strong> The owner of the data that the client wants to access.<\/li>\n<\/ul>\n<h2>3. Implementing OAuth2 with Spring Boot<\/h2>\n<p>Now, let&#8217;s implement OAuth2 using Spring Boot. In this example, we will use Google OAuth2 to implement login and logout.<\/p>\n<h3>3.1 Project Setup<\/h3>\n<p>We will use Spring Initializr (https:\/\/start.spring.io\/) to create a Spring Boot project. We will add the following dependencies:<\/p>\n<ul>\n<li>Spring Web<\/li>\n<li>Spring Security<\/li>\n<li>Spring Boot DevTools<\/li>\n<li>OAuth2 Client<\/li>\n<\/ul>\n<h3>3.2 Configure application.yml<\/h3>\n<p>After the project is created, set the Google OAuth2 client ID and client secret in the <code>src\/main\/resources\/application.yml<\/code> file.<\/p>\n<pre><code>spring:\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\/oauth2\/v3\/userinfo\n            user-info-authentication-method: header\n<\/code><\/pre>\n<h3>3.3 Configure WebSecurityConfigurerAdapter<\/h3>\n<p>We configure Spring Security to enable OAuth2 support. We will extend <code>WebSecurityConfigurerAdapter<\/code> and define the necessary configurations.<\/p>\n<pre><code>import 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    @Override\n    protected void configure(HttpSecurity http) throws Exception {\n        http\n            .authorizeRequests()\n                .antMatchers(\"\/\", \"\/login\").permitAll()\n                .anyRequest().authenticated()\n                .and()\n            .oauth2Login()\n                .loginPage(\"\/login\")\n                .defaultSuccessUrl(\"\/home\", true);\n    }\n}\n<\/code><\/pre>\n<h3>3.4 Add Login Controller<\/h3>\n<p>Add a controller to redirect after login.<\/p>\n<pre><code>import org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.GetMapping;\n\n@Controller\npublic class HomeController {\n    \n    @GetMapping(\"\/\")\n    public String index() {\n        return \"index\"; \/\/ Return index page view\n    }\n\n    @GetMapping(\"\/home\")\n    public String home() {\n        return \"home\"; \/\/ Return home page view\n    }\n}\n<\/code><\/pre>\n<h3>3.5 Create HTML Views<\/h3>\n<p>Create two HTML files to be used in Spring Boot. Generate the <code>src\/main\/resources\/templates\/index.html<\/code> file.<\/p>\n<pre><code>&lt;!DOCTYPE html&gt;\n&lt;html lang=\"en\"&gt;\n&lt;head&gt;\n    &lt;meta charset=\"UTF-8\"&gt;\n    &lt;title&gt;OAuth Login&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n    &lt;h1&gt;Welcome!&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<p>Next, create the <code>src\/main\/resources\/templates\/home.html<\/code> file.<\/p>\n<pre><code>&lt;!DOCTYPE html&gt;\n&lt;html lang=\"en\"&gt;\n&lt;head&gt;\n    &lt;meta charset=\"UTF-8\"&gt;\n    &lt;title&gt;Home&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n    &lt;h1&gt;Hello, &lt;span th:text=\"${#authentication.details.name}\"&gt;&lt;\/span&gt;!&lt;\/h1&gt;\n    &lt;a href=\"\/logout\"&gt;Logout&lt;\/a&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre>\n<h3>3.6 Run the Application<\/h3>\n<p>When you build and run the project, you will see a Google login link on the application&#8217;s main page. Clicking this will redirect you to the Google login page, and upon successful login, you will return to the home page.<\/p>\n<h2>4. Conclusion<\/h2>\n<p>We have successfully implemented login and logout features using Spring Boot and OAuth2. OAuth2 enables secure sharing of data between various services, providing an enhanced user experience. Additionally, you can choose an authentication method that fits your business logic by utilizing various features of OAuth2.<\/p>\n<p>If you want more resources and information, please refer to the official Spring Boot documentation and various materials on OAuth2. Feel free to leave your questions in the comments, and I will do my best to help with what I know. Thank you!<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hello! In this blog post, we will learn how to implement secure login and logout features using OAuth 2.0 with Spring Boot. We will start by understanding what OAuth is and its basic concepts, followed by a detailed look at how to use OAuth2 in Spring Boot through practical code examples. 1. What is OAuth? &hellip; <a href=\"https:\/\/atmokpo.com\/w\/33015\/\" 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 OAuth&#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-33015","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 OAuth - \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\/33015\/\" \/>\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 OAuth - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"Hello! In this blog post, we will learn how to implement secure login and logout features using OAuth 2.0 with Spring Boot. We will start by understanding what OAuth is and its basic concepts, followed by a detailed look at how to use OAuth2 in Spring Boot through practical code examples. 1. What is OAuth? &hellip; \ub354 \ubcf4\uae30 &quot;Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, What is OAuth&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/33015\/\" \/>\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:19+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\/33015\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33015\/\"},\"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 OAuth\",\"datePublished\":\"2024-11-01T09:13:08+00:00\",\"dateModified\":\"2024-11-01T11:29:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33015\/\"},\"wordCount\":552,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"Spring Boot backend development\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/33015\/\",\"url\":\"https:\/\/atmokpo.com\/w\/33015\/\",\"name\":\"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, What is OAuth - \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:19+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33015\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/33015\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/33015\/#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 OAuth\"}]},{\"@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 OAuth - \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\/33015\/","og_locale":"ko_KR","og_type":"article","og_title":"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, What is OAuth - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"Hello! In this blog post, we will learn how to implement secure login and logout features using OAuth 2.0 with Spring Boot. We will start by understanding what OAuth is and its basic concepts, followed by a detailed look at how to use OAuth2 in Spring Boot through practical code examples. 1. What is OAuth? &hellip; \ub354 \ubcf4\uae30 \"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, What is OAuth\"","og_url":"https:\/\/atmokpo.com\/w\/33015\/","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:19+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\/33015\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/33015\/"},"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 OAuth","datePublished":"2024-11-01T09:13:08+00:00","dateModified":"2024-11-01T11:29:19+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/33015\/"},"wordCount":552,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["Spring Boot backend development"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/33015\/","url":"https:\/\/atmokpo.com\/w\/33015\/","name":"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, What is OAuth - \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:19+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/33015\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/33015\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/33015\/#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 OAuth"}]},{"@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\/33015","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=33015"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33015\/revisions"}],"predecessor-version":[{"id":33016,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33015\/revisions\/33016"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=33015"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=33015"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=33015"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}