{"id":276,"date":"2023-01-24T18:57:28","date_gmt":"2023-01-24T18:57:28","guid":{"rendered":"https:\/\/valerio.nu\/?p=276"},"modified":"2023-01-24T18:57:28","modified_gmt":"2023-01-24T18:57:28","slug":"implementing-oauth2-in-simple-steps-using-spring-security","status":"publish","type":"post","link":"https:\/\/valerio.nu\/index.php\/2023\/01\/24\/implementing-oauth2-in-simple-steps-using-spring-security\/","title":{"rendered":"Implementing OAuth2 in simple steps using Spring security"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\"><strong>Introduction<\/strong><\/h2>\n\n\n\n<p>In this tutorial, we will show in simple steps how to implement a simplified OAuth2 login flow using Spring Boot as a way to enhance Spring application security. Securing access to applications can involve different processes and layers. In our previous article, we implemented persistence with <a href=\"https:\/\/valerio.nu\/index.php\/2023\/01\/02\/handling-persistency-using-spring-security\/\">Spring security<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>The concept<\/strong><\/h3>\n\n\n\n<p>OAuth2 understandably stands for open authorization and is the industry standard for online authorization. Applications can get authorization approvals using OAuth2 features. OAuth2 is known widely as the second version of the OAuth2 protocol. It enables the ability for users to sign-on into applications, providing limited authentication access.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Services in OAuth2<\/strong><\/h3>\n\n\n\n<p>OAuth2 plays a very important role when it comes to application authorization. It ensures resource ownership for application users, granting access to client applications, providing a resource server for user accounts as in the case of Google where contact details are hosted, and providing an authorization server by using token validation.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Tokens issued by OAuth2<\/strong><\/h3>\n\n\n\n<p>Tokens provide extra validation checks and ensure only users\/applications issued such tokens can access resources. Two types of tokens are issued here. The access token is issued to third-party apps and the refresh tokens persist user details longer than the access token. An access token is granted solely for authentication where necessary.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Implementing our OAuth2 application.<\/strong><\/h3>\n\n\n\n<p>This process is simple as we used the Okta Spring Boot Starter maven dependency. Using Okta provided a mean for easy authentication. First oa all we need to create an <a href=\"https:\/\/developer.okta.com\/signup\/\">okta developer account,<\/a> then add our project using the following process:\u00a0 <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>navigate to Applications<\/li>\n\n\n\n<li>add Application<\/li>\n\n\n\n<li>click Web, and Next<\/li>\n<\/ul>\n\n\n\n<p>On the next page, we enter a desired name for our app (e.g., &#8220;User Management Portal&#8221;), then we click Done. Afterward, the OpenID authentication keys become available for us to copy and integrate into our local application. Simply add the keys to our application.yml file.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"531\" src=\"https:\/\/valerio.nu\/wp-content\/uploads\/2023\/01\/Screenshot-2023-01-22-at-05.05.37-1-1024x531.png\" alt=\"\" class=\"wp-image-283\" srcset=\"https:\/\/valerio.nu\/wp-content\/uploads\/2023\/01\/Screenshot-2023-01-22-at-05.05.37-1-1024x531.png 1024w, https:\/\/valerio.nu\/wp-content\/uploads\/2023\/01\/Screenshot-2023-01-22-at-05.05.37-1-300x156.png 300w, https:\/\/valerio.nu\/wp-content\/uploads\/2023\/01\/Screenshot-2023-01-22-at-05.05.37-1-768x398.png 768w, https:\/\/valerio.nu\/wp-content\/uploads\/2023\/01\/Screenshot-2023-01-22-at-05.05.37-1-1536x796.png 1536w, https:\/\/valerio.nu\/wp-content\/uploads\/2023\/01\/Screenshot-2023-01-22-at-05.05.37-1-2048x1062.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Okta Application integration dashboard<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Prerequisites<\/strong><\/h3>\n\n\n\n<p>The minimum requirement specifications needed to implement this tutorial are:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Spring Boot 2.7.*<\/li>\n\n\n\n<li>Spring Web<\/li>\n\n\n\n<li>Thymeleaf<\/li>\n\n\n\n<li>Okta<\/li>\n\n\n\n<li>JDK 1.8 and above<\/li>\n<\/ol>\n\n\n\n<p>Using the <a href=\"https:\/\/start.spring.io\/\">Start.spring.io<\/a> website, we can easily get our starter project ready.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Implementing a flow<\/h4>\n\n\n\n<p>Rename the application.property filename to application.yml so that we can integrate our Okta config files.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>server:\n  port: 8080\nokta:\n  oauth2:\n    issuer: https:\/\/dev-03612618.okta.com\/oauth2\/default\n    client-id: 0oa81w6ise8YhMCk25d7\n    client-secret: BiQ5uLG8e-57jxMc7EGHmUtl5nkTYz5ag6wzFKvQ\n    redirect-uri: \/authorization-code\/callback\nspring:\n  thymeleaf:\n    cache: false<\/code><\/pre>\n\n\n\n<p>Create a Security configuration class to provide authorization. This will filter URL access:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Configuration\npublic class SecurityConfiguration extends WebSecurityConfigurerAdapter {\n    @Override\n    public void configure(HttpSecurity http) throws Exception {\n        http.antMatcher(\"\/**\").authorizeRequests()\n                .antMatchers(\"\/\").permitAll()\n                .anyRequest().authenticated()\n                .and()\n                .oauth2Login();\n    }\n}<\/code><\/pre>\n\n\n\n<p>Create the Controller file to manage various endpoints:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Controller\npublic class HomeController {\n\n    @RequestMapping(\"\/dashboard\")\n    public String dashboard(Model model, Principal principal) {\n        return \"dashboard\";\n    }\n\n\n    @RequestMapping(\"\/login\")\n    public String login(Model model, Principal principal) {\n        return \"login\";\n    }\n    @RequestMapping(\"\/\")\n    public String index(Model model, Principal principal) {\n        return \"index\";\n    }\n}\n<\/code><\/pre>\n\n\n\n<p>Add the template file to the resource folder<\/p>\n\n\n\n<pre class=\"wp-block-code\"><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;Hello new app&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n&lt;h1&gt;Sign in to your app&lt;\/h1&gt;\n&lt;a href=\"login\"&gt;Login&lt;\/a&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n\n\n\n<p>In conclusion, in this tutorial we covered OAuth2 implementation in Spring Boot using Okta. Our entire source code for this project can be found on our <a href=\"https:\/\/github.com\/valerio-nu\/spring-security-oauth2\" target=\"_blank\" rel=\"noreferrer noopener\">GitHub page<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction In this tutorial, we will show in simple steps how to implement a simplified OAuth2 login flow using Spring Boot as a way to [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[],"class_list":["post-276","post","type-post","status-publish","format-standard","hentry","category-java"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Implementing OAuth2 in simple steps using Spring security - Andy&#039;s blog \u2935\ufe0f<\/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:\/\/valerio.nu\/index.php\/2023\/01\/24\/implementing-oauth2-in-simple-steps-using-spring-security\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Implementing OAuth2 in simple steps using Spring security - Andy&#039;s blog \u2935\ufe0f\" \/>\n<meta property=\"og:description\" content=\"Introduction In this tutorial, we will show in simple steps how to implement a simplified OAuth2 login flow using Spring Boot as a way to [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/valerio.nu\/index.php\/2023\/01\/24\/implementing-oauth2-in-simple-steps-using-spring-security\/\" \/>\n<meta property=\"og:site_name\" content=\"Andy&#039;s blog \u2935\ufe0f\" \/>\n<meta property=\"article:published_time\" content=\"2023-01-24T18:57:28+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/valerio.nu\/wp-content\/uploads\/2023\/01\/Screenshot-2023-01-22-at-05.05.37-1-1024x531.png\" \/>\n<meta name=\"author\" content=\"andy\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"andy\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/valerio.nu\\\/index.php\\\/2023\\\/01\\\/24\\\/implementing-oauth2-in-simple-steps-using-spring-security\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/valerio.nu\\\/index.php\\\/2023\\\/01\\\/24\\\/implementing-oauth2-in-simple-steps-using-spring-security\\\/\"},\"author\":{\"name\":\"andy\",\"@id\":\"https:\\\/\\\/valerio.nu\\\/#\\\/schema\\\/person\\\/da69cc3da309893b0d3bc8fcef75f128\"},\"headline\":\"Implementing OAuth2 in simple steps using Spring security\",\"datePublished\":\"2023-01-24T18:57:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/valerio.nu\\\/index.php\\\/2023\\\/01\\\/24\\\/implementing-oauth2-in-simple-steps-using-spring-security\\\/\"},\"wordCount\":434,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/valerio.nu\\\/index.php\\\/2023\\\/01\\\/24\\\/implementing-oauth2-in-simple-steps-using-spring-security\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/valerio.nu\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/Screenshot-2023-01-22-at-05.05.37-1-1024x531.png\",\"articleSection\":[\"Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/valerio.nu\\\/index.php\\\/2023\\\/01\\\/24\\\/implementing-oauth2-in-simple-steps-using-spring-security\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/valerio.nu\\\/index.php\\\/2023\\\/01\\\/24\\\/implementing-oauth2-in-simple-steps-using-spring-security\\\/\",\"url\":\"https:\\\/\\\/valerio.nu\\\/index.php\\\/2023\\\/01\\\/24\\\/implementing-oauth2-in-simple-steps-using-spring-security\\\/\",\"name\":\"Implementing OAuth2 in simple steps using Spring security - Andy&#039;s blog \u2935\ufe0f\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/valerio.nu\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/valerio.nu\\\/index.php\\\/2023\\\/01\\\/24\\\/implementing-oauth2-in-simple-steps-using-spring-security\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/valerio.nu\\\/index.php\\\/2023\\\/01\\\/24\\\/implementing-oauth2-in-simple-steps-using-spring-security\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/valerio.nu\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/Screenshot-2023-01-22-at-05.05.37-1-1024x531.png\",\"datePublished\":\"2023-01-24T18:57:28+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/valerio.nu\\\/#\\\/schema\\\/person\\\/da69cc3da309893b0d3bc8fcef75f128\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/valerio.nu\\\/index.php\\\/2023\\\/01\\\/24\\\/implementing-oauth2-in-simple-steps-using-spring-security\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/valerio.nu\\\/index.php\\\/2023\\\/01\\\/24\\\/implementing-oauth2-in-simple-steps-using-spring-security\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/valerio.nu\\\/index.php\\\/2023\\\/01\\\/24\\\/implementing-oauth2-in-simple-steps-using-spring-security\\\/#primaryimage\",\"url\":\"https:\\\/\\\/valerio.nu\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/Screenshot-2023-01-22-at-05.05.37-1.png\",\"contentUrl\":\"https:\\\/\\\/valerio.nu\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/Screenshot-2023-01-22-at-05.05.37-1.png\",\"width\":2911,\"height\":1509},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/valerio.nu\\\/index.php\\\/2023\\\/01\\\/24\\\/implementing-oauth2-in-simple-steps-using-spring-security\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/valerio.nu\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Implementing OAuth2 in simple steps using Spring security\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/valerio.nu\\\/#website\",\"url\":\"https:\\\/\\\/valerio.nu\\\/\",\"name\":\"Andy&#039;s blog \u2935\ufe0f\",\"description\":\"Abandon all hope, ye who enter here\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/valerio.nu\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/valerio.nu\\\/#\\\/schema\\\/person\\\/da69cc3da309893b0d3bc8fcef75f128\",\"name\":\"andy\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4852a025c6250c852814d4017f646677730a23c1ec14eb5ca36b69dcce5135a5?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4852a025c6250c852814d4017f646677730a23c1ec14eb5ca36b69dcce5135a5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4852a025c6250c852814d4017f646677730a23c1ec14eb5ca36b69dcce5135a5?s=96&d=mm&r=g\",\"caption\":\"andy\"},\"sameAs\":[\"https:\\\/\\\/valerio.nu\"],\"url\":\"https:\\\/\\\/valerio.nu\\\/index.php\\\/author\\\/giuseppe\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Implementing OAuth2 in simple steps using Spring security - Andy&#039;s blog \u2935\ufe0f","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:\/\/valerio.nu\/index.php\/2023\/01\/24\/implementing-oauth2-in-simple-steps-using-spring-security\/","og_locale":"en_US","og_type":"article","og_title":"Implementing OAuth2 in simple steps using Spring security - Andy&#039;s blog \u2935\ufe0f","og_description":"Introduction In this tutorial, we will show in simple steps how to implement a simplified OAuth2 login flow using Spring Boot as a way to [&hellip;]","og_url":"https:\/\/valerio.nu\/index.php\/2023\/01\/24\/implementing-oauth2-in-simple-steps-using-spring-security\/","og_site_name":"Andy&#039;s blog \u2935\ufe0f","article_published_time":"2023-01-24T18:57:28+00:00","og_image":[{"url":"https:\/\/valerio.nu\/wp-content\/uploads\/2023\/01\/Screenshot-2023-01-22-at-05.05.37-1-1024x531.png","type":"","width":"","height":""}],"author":"andy","twitter_card":"summary_large_image","twitter_misc":{"Written by":"andy","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/valerio.nu\/index.php\/2023\/01\/24\/implementing-oauth2-in-simple-steps-using-spring-security\/#article","isPartOf":{"@id":"https:\/\/valerio.nu\/index.php\/2023\/01\/24\/implementing-oauth2-in-simple-steps-using-spring-security\/"},"author":{"name":"andy","@id":"https:\/\/valerio.nu\/#\/schema\/person\/da69cc3da309893b0d3bc8fcef75f128"},"headline":"Implementing OAuth2 in simple steps using Spring security","datePublished":"2023-01-24T18:57:28+00:00","mainEntityOfPage":{"@id":"https:\/\/valerio.nu\/index.php\/2023\/01\/24\/implementing-oauth2-in-simple-steps-using-spring-security\/"},"wordCount":434,"commentCount":0,"image":{"@id":"https:\/\/valerio.nu\/index.php\/2023\/01\/24\/implementing-oauth2-in-simple-steps-using-spring-security\/#primaryimage"},"thumbnailUrl":"https:\/\/valerio.nu\/wp-content\/uploads\/2023\/01\/Screenshot-2023-01-22-at-05.05.37-1-1024x531.png","articleSection":["Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/valerio.nu\/index.php\/2023\/01\/24\/implementing-oauth2-in-simple-steps-using-spring-security\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/valerio.nu\/index.php\/2023\/01\/24\/implementing-oauth2-in-simple-steps-using-spring-security\/","url":"https:\/\/valerio.nu\/index.php\/2023\/01\/24\/implementing-oauth2-in-simple-steps-using-spring-security\/","name":"Implementing OAuth2 in simple steps using Spring security - Andy&#039;s blog \u2935\ufe0f","isPartOf":{"@id":"https:\/\/valerio.nu\/#website"},"primaryImageOfPage":{"@id":"https:\/\/valerio.nu\/index.php\/2023\/01\/24\/implementing-oauth2-in-simple-steps-using-spring-security\/#primaryimage"},"image":{"@id":"https:\/\/valerio.nu\/index.php\/2023\/01\/24\/implementing-oauth2-in-simple-steps-using-spring-security\/#primaryimage"},"thumbnailUrl":"https:\/\/valerio.nu\/wp-content\/uploads\/2023\/01\/Screenshot-2023-01-22-at-05.05.37-1-1024x531.png","datePublished":"2023-01-24T18:57:28+00:00","author":{"@id":"https:\/\/valerio.nu\/#\/schema\/person\/da69cc3da309893b0d3bc8fcef75f128"},"breadcrumb":{"@id":"https:\/\/valerio.nu\/index.php\/2023\/01\/24\/implementing-oauth2-in-simple-steps-using-spring-security\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/valerio.nu\/index.php\/2023\/01\/24\/implementing-oauth2-in-simple-steps-using-spring-security\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/valerio.nu\/index.php\/2023\/01\/24\/implementing-oauth2-in-simple-steps-using-spring-security\/#primaryimage","url":"https:\/\/valerio.nu\/wp-content\/uploads\/2023\/01\/Screenshot-2023-01-22-at-05.05.37-1.png","contentUrl":"https:\/\/valerio.nu\/wp-content\/uploads\/2023\/01\/Screenshot-2023-01-22-at-05.05.37-1.png","width":2911,"height":1509},{"@type":"BreadcrumbList","@id":"https:\/\/valerio.nu\/index.php\/2023\/01\/24\/implementing-oauth2-in-simple-steps-using-spring-security\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/valerio.nu\/"},{"@type":"ListItem","position":2,"name":"Implementing OAuth2 in simple steps using Spring security"}]},{"@type":"WebSite","@id":"https:\/\/valerio.nu\/#website","url":"https:\/\/valerio.nu\/","name":"Andy&#039;s blog \u2935\ufe0f","description":"Abandon all hope, ye who enter here","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/valerio.nu\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/valerio.nu\/#\/schema\/person\/da69cc3da309893b0d3bc8fcef75f128","name":"andy","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/4852a025c6250c852814d4017f646677730a23c1ec14eb5ca36b69dcce5135a5?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/4852a025c6250c852814d4017f646677730a23c1ec14eb5ca36b69dcce5135a5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4852a025c6250c852814d4017f646677730a23c1ec14eb5ca36b69dcce5135a5?s=96&d=mm&r=g","caption":"andy"},"sameAs":["https:\/\/valerio.nu"],"url":"https:\/\/valerio.nu\/index.php\/author\/giuseppe\/"}]}},"_links":{"self":[{"href":"https:\/\/valerio.nu\/index.php\/wp-json\/wp\/v2\/posts\/276","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/valerio.nu\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/valerio.nu\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/valerio.nu\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/valerio.nu\/index.php\/wp-json\/wp\/v2\/comments?post=276"}],"version-history":[{"count":11,"href":"https:\/\/valerio.nu\/index.php\/wp-json\/wp\/v2\/posts\/276\/revisions"}],"predecessor-version":[{"id":292,"href":"https:\/\/valerio.nu\/index.php\/wp-json\/wp\/v2\/posts\/276\/revisions\/292"}],"wp:attachment":[{"href":"https:\/\/valerio.nu\/index.php\/wp-json\/wp\/v2\/media?parent=276"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/valerio.nu\/index.php\/wp-json\/wp\/v2\/categories?post=276"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/valerio.nu\/index.php\/wp-json\/wp\/v2\/tags?post=276"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}