{"id":689908,"date":"2025-08-07T10:49:04","date_gmt":"2025-08-07T08:49:04","guid":{"rendered":"https:\/\/www.devoteam.com\/expert-view\/every-frontend-needs-its-backend\/"},"modified":"2025-08-07T10:49:04","modified_gmt":"2025-08-07T08:49:04","slug":"every-frontend-needs-its-backend","status":"publish","type":"expert-view","link":"https:\/\/devoteam.info\/me\/expert-view\/every-frontend-needs-its-backend\/","title":{"rendered":"Every Frontend Needs Its Backend: OAuth2 Token Security in Single-Page Applications"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The world of web development has changed a lot in the last decade. We&#8217;ve moved from traditional, multi-page websites that build pages on a server, to <strong>single-page applications (SPAs)<\/strong>, which have become a popular way to build websites. While old-school sites need to reload the entire page for every user action, causing noticeable delays, SPAs feel more fluid and app-like. They use JavaScript to update content dynamically without reloading the page. This shift has been helped by powerful JavaScript frameworks like React, Angular, and Vue, which give developers great tools to build complex, interactive apps. However, this approach, where most of the work happens in your browser, also creates unique security challenges.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/devoteam.info\/wp-content\/uploads\/2025\/08\/Visual-1-Blog-post-v3-1024x683.jpg\" alt=\"\" class=\"wp-image-688766\" style=\"width:600px\" srcset=\"https:\/\/devoteam.info\/wp-content\/uploads\/2025\/08\/Visual-1-Blog-post-v3-1024x683.jpg 1024w, https:\/\/devoteam.info\/wp-content\/uploads\/2025\/08\/Visual-1-Blog-post-v3-300x200.jpg 300w, https:\/\/devoteam.info\/wp-content\/uploads\/2025\/08\/Visual-1-Blog-post-v3-768x512.jpg 768w, https:\/\/devoteam.info\/wp-content\/uploads\/2025\/08\/Visual-1-Blog-post-v3.jpg 1536w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Traditional websites often start with an HTML template. The server then requests the necessary user-specific data and generates the HTML page, incorporating the retrieved data and user-specific information into the template. This is often done using server-side languages like PHP, Python, or Java. In SPAs, however, all the code to update the page runs directly in your browser. The client-side logic, written in JavaScript, will typically call APIs that return the dynamic content. The problem is that these APIs aren&#8217;t usually open to everyone; they need some form of <strong>authorisation<\/strong>. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In this article, we&#8217;ll focus on the security issues of using the OAuth2 standard in SPAs, as it\u2019s one of the most common ways to authorise APIs today.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-oauth2-security-in-single-page-applications\"><strong>OAuth2 security in single-page applications<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The first problem with OAuth2 security for SPAs is with <strong>client (application) authentication<\/strong>. In short, an SPA shouldn&#8217;t have any secret keys or passwords stored in its code, because anyone can see them in their browser. This means the OAuth2 client can&#8217;t use a secret to prove its identity. Originally, the OAuth2 \u2018implicit grant flow\u2019 was created for this situation, as it skipped this authentication step. However, this method had security weaknesses and was officially removed in OAuth standard version 2.1.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It&#8217;s been replaced by the <strong>authorisation grant flow with PKCE<\/strong> (Proof Key for Code Exchange). PKCE is clever because it uses a unique, temporary challenge for each login attempt instead of a fixed, reusable secret. By using this flow, the SPA doesn&#8217;t need to store a secret value, but can still prove its identity securely.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The second problem SPAs face is how to store the <strong>access tokens<\/strong> (and optional refresh tokens). These tokens need to be stored somewhere in the browser, like localStorage, sessionStorage or in memory. While each storage type has its pros and cons, they are all at risk from malicious JavaScript. With modern SPAs being so complex, it&#8217;s very difficult to completely protect against <strong>Cross-Site Scripting (XSS)<\/strong> attacks, making token theft an attractive target for attackers. While there isn&#8217;t a universally agreed-upon solution for this, we&#8217;ll explain a popular design pattern that improves token security in SPAs.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-the-backend-for-frontend-pattern\"><strong>The Backend for Frontend pattern<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The <strong>Backend for Frontend (BFF)<\/strong> is a design pattern where each frontend application (like an iOS app, Android app, or web app) gets its own dedicated backend. This is different from having one giant backend that serves everything. In terms of token security, the BFF is a small, simple backend that works alongside the SPA.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here&#8217;s how it works:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The BFF handles all the OAuth2 interactions with the Authorisation Server. Because the BFF runs on a secure server you control, it&#8217;s a \u2018confidential client\u2019 and can safely store secrets.<\/li>\n\n\n\n<li>The OAuth2 access and refresh tokens are stored securely in the BFF.<\/li>\n\n\n\n<li>The BFF creates a secure, cookie-based session with the frontend SPA.<\/li>\n\n\n\n<li>Every API request from the SPA goes through the BFF. The BFF checks the session cookie, adds the correct access token to the request, and then sends it to the main API.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">An SPA using a BFF for its OAuth2 security would look something like this:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"749\" height=\"1024\" src=\"https:\/\/devoteam.info\/wp-content\/uploads\/2025\/08\/Visual-OAuth2-Blogv2-749x1024.jpg\" alt=\"\" class=\"wp-image-688814\" style=\"width:auto;height:800px\" srcset=\"https:\/\/devoteam.info\/wp-content\/uploads\/2025\/08\/Visual-OAuth2-Blogv2-749x1024.jpg 749w, https:\/\/devoteam.info\/wp-content\/uploads\/2025\/08\/Visual-OAuth2-Blogv2-219x300.jpg 219w, https:\/\/devoteam.info\/wp-content\/uploads\/2025\/08\/Visual-OAuth2-Blogv2-768x1050.jpg 768w, https:\/\/devoteam.info\/wp-content\/uploads\/2025\/08\/Visual-OAuth2-Blogv2.jpg 1024w\" sizes=\"auto, (max-width: 749px) 100vw, 749px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-considerations-and-security-pitfalls\"><strong>Considerations and security pitfalls<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The BFF pattern uses a session cookie to find the user&#8217;s tokens. Sessions can be managed on the server or the client. <strong>Server-side sessions<\/strong> store only a reference ID in the cookie, while the actual session data lives on the backend. This gives you full control, but to keep the service running smoothly, this session information needs to be shared across several servers.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Client-side sessions<\/strong> put all the session data inside the browser cookie itself. To stop anyone tampering with it, the cookie must be digitally signed and, optionally, encrypted. Client-side cookies mean you don&#8217;t need to synchronise session data, but they can make it harder to revoke a user&#8217;s session. However, with a BFF, session revocation isn&#8217;t a big concern, as the tokens themselves are controlled by the backend anyway. You just need to revoke the user&#8217;s access token on the server, without needing to invalidate the cookie. For this reason, <strong>client-based sessions are usually the best choice for a BFF architecture<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You should always follow standard cookie security rules. The session cookie should be flagged as <em>Secure<\/em>, <em>HttpOnly<\/em>, and <em>SameSite=strict<\/em>. You shouldn&#8217;t set a Domain attribute, which locks the cookie to a specific hostname. To enforce these rules in the browser, you should also prefix the cookie&#8217;s name with <em>__Host-<\/em>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-conclusion\">Conclusion<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Single-page applications (SPAs) are very popular, but they create security challenges, especially with OAuth2 authorisation. Storing tokens in the browser&#8217;s sessionStorage or localStorage is risky because they&#8217;re vulnerable to JavaScript injection attacks.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To solve this, the <strong>Backend for Frontend (BFF)<\/strong> pattern is a great solution. In this model, each frontend has its own backend that handles all the OAuth2 interactions. It stores access and refresh tokens securely on the server. The BFF establishes a cookie-based session with the frontend and acts as a trusted proxy for all API requests, adding the necessary access token before sending them on.<\/p>\n\n\n\n<div class=\"wp-block-columns alignfull has-secondary-background-color has-background is-layout-flex wp-container-core-columns-is-layout-4b1fd674 wp-block-columns-is-layout-flex\" style=\"margin-top:var(--wp--preset--spacing--medium);margin-bottom:var(--wp--preset--spacing--medium)\">\n<div class=\"wp-block-column is-vertically-aligned-center is-layout-flow wp-container-core-column-is-layout-969dc29d wp-block-column-is-layout-flow\" style=\"padding-top:0;padding-right:0;padding-bottom:0;padding-left:0;flex-basis:100%\">\n<p class=\"has-text-align-left has-main-color has-text-color has-medium-font-size wp-container-content-42c95ffb wp-block-paragraph\"><strong>Secure AI, Sustainable Value: Your CISO\u2019s Guide to AI Risk Management<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"729\" src=\"https:\/\/devoteam.info\/wp-content\/uploads\/2025\/04\/CyberTrust_Ebook_Secure-AI-Sustainable-Value_mockup_open-1-1024x729.png\" alt=\"Secure-AI-Sustainable-Value. cover\" class=\"wp-image-582077\" srcset=\"https:\/\/devoteam.info\/wp-content\/uploads\/2025\/04\/CyberTrust_Ebook_Secure-AI-Sustainable-Value_mockup_open-1-1024x729.png 1024w, https:\/\/devoteam.info\/wp-content\/uploads\/2025\/04\/CyberTrust_Ebook_Secure-AI-Sustainable-Value_mockup_open-1-300x213.png 300w, https:\/\/devoteam.info\/wp-content\/uploads\/2025\/04\/CyberTrust_Ebook_Secure-AI-Sustainable-Value_mockup_open-1-768x546.png 768w, https:\/\/devoteam.info\/wp-content\/uploads\/2025\/04\/CyberTrust_Ebook_Secure-AI-Sustainable-Value_mockup_open-1-1536x1093.png 1536w, https:\/\/devoteam.info\/wp-content\/uploads\/2025\/04\/CyberTrust_Ebook_Secure-AI-Sustainable-Value_mockup_open-1.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-vertically-aligned-stretch has-secondary-background-color has-background is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<div class=\"wp-block-group has-main-color has-secondary-background-color has-text-color has-background has-link-color wp-elements-1 is-layout-flow wp-container-core-group-is-layout-23162e80 wp-block-group-is-layout-flow\" style=\"margin-top:0;margin-bottom:0;padding-top:var(--wp--preset--spacing--medium);padding-right:var(--wp--preset--spacing--large);padding-bottom:var(--wp--preset--spacing--medium);padding-left:var(--wp--preset--spacing--large)\">\n<div class=\"wp-block-group is-vertical is-content-justification-left is-layout-flex wp-container-core-group-is-layout-4a15ae55 wp-block-group-is-layout-flex\" style=\"min-height:0px\">\n<p class=\"has-medium-small-font-size wp-block-paragraph\">Get your free Whitepaper if you want to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Learn <\/strong>to identify and manage unique AI security challenges<\/li>\n\n\n\n<li><strong>Implement<\/strong> Devoteam&#8217;s AI Cyber Trust Cube &#8211; our framework for trusted and secure AI deployments<\/li>\n\n\n\n<li><strong>Align<\/strong> AI with your organisation\u2019s sustainability goals<\/li>\n\n\n\n<li><strong>Gain<\/strong> insights from Devoteam\u2019s leading AI security experts.<\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-buttons is-content-justification-left is-layout-flex wp-container-core-buttons-is-layout-5446dffb wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/devoteam.info\/whitepaper\/ai-risk-management-guide\/\">Download the Whitepaper<\/a><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>The world of web development has changed a lot in the last decade. We&#8217;ve moved from traditional, multi-page websites that build pages on a server, to single-page applications (SPAs), which have become a popular way to build websites. While old-school sites need to reload the entire page for every user action, causing noticeable delays, SPAs [&hellip;]<\/p>\n","protected":false},"featured_media":0,"template":"","categories":[],"tags":[6069],"industry":[],"class_list":["post-689908","expert-view","type-expert-view","status-publish","hentry","tag-oauth2-token-security-me"],"acf":[],"cards":"\n\t<div class=\"single-post-card\">\n\n\t\t\n\n\t\t\n\t\t<div class=\"wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-43282307 wp-block-group-is-layout-flex\">\n\t<p style=\"font-style:normal;font-weight:700\" class=\"has-link-color wp-elements-2 wp-block-lp-post-type has-text-color has-primary-color has-small-font-size\">Expert View<\/p>\n\n\t\t\n\t\t<h3 style=\"font-style:normal;font-weight:400\" class=\"wp-block-post-title has-base-font-size\"><a href=\"https:\/\/devoteam.info\/me\/expert-view\/every-frontend-needs-its-backend\/\" target=\"_self\" >Every Frontend Needs Its Backend: OAuth2 Token Security in Single-Page Applications<\/a><\/h3><\/div>\n\t\t\n\t<\/div>\n\n","yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.4 (Yoast SEO v28.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Every Frontend Needs Its Backend: OAuth2 Token Security in Single-Page Applications | Devoteam<\/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:\/\/devoteam.info\/me\/expert-view\/every-frontend-needs-its-backend\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Every Frontend Needs Its Backend: OAuth2 Token Security in Single-Page Applications\" \/>\n<meta property=\"og:description\" content=\"The world of web development has changed a lot in the last decade. We&#8217;ve moved from traditional, multi-page websites that build pages on a server, to single-page applications (SPAs), which have become a popular way to build websites. While old-school sites need to reload the entire page for every user action, causing noticeable delays, SPAs [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/devoteam.info\/me\/expert-view\/every-frontend-needs-its-backend\/\" \/>\n<meta property=\"og:site_name\" content=\"Devoteam\" \/>\n<meta property=\"og:image\" content=\"https:\/\/devoteam.info\/wp-content\/uploads\/2025\/08\/Visual-1-Blog-post-v3.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1536\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/devoteam.info\\\/me\\\/expert-view\\\/every-frontend-needs-its-backend\\\/\",\"url\":\"https:\\\/\\\/devoteam.info\\\/me\\\/expert-view\\\/every-frontend-needs-its-backend\\\/\",\"name\":\"Every Frontend Needs Its Backend: OAuth2 Token Security in Single-Page Applications | Devoteam\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/devoteam.info\\\/me\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/devoteam.info\\\/me\\\/expert-view\\\/every-frontend-needs-its-backend\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/devoteam.info\\\/me\\\/expert-view\\\/every-frontend-needs-its-backend\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/devoteam.info\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/Visual-1-Blog-post-v3-1024x683.jpg\",\"datePublished\":\"2025-08-07T08:49:04+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/devoteam.info\\\/me\\\/expert-view\\\/every-frontend-needs-its-backend\\\/#breadcrumb\"},\"inLanguage\":\"en-SA\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/devoteam.info\\\/me\\\/expert-view\\\/every-frontend-needs-its-backend\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-SA\",\"@id\":\"https:\\\/\\\/devoteam.info\\\/me\\\/expert-view\\\/every-frontend-needs-its-backend\\\/#primaryimage\",\"url\":\"https:\\\/\\\/devoteam.info\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/Visual-1-Blog-post-v3-1024x683.jpg\",\"contentUrl\":\"https:\\\/\\\/devoteam.info\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/Visual-1-Blog-post-v3-1024x683.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/devoteam.info\\\/me\\\/expert-view\\\/every-frontend-needs-its-backend\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/devoteam.info\\\/me\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Expert View\",\"item\":\"https:\\\/\\\/devoteam.info\\\/me\\\/expert-view\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Every Frontend Needs Its Backend: OAuth2 Token Security in Single-Page Applications\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/devoteam.info\\\/me\\\/#website\",\"url\":\"https:\\\/\\\/devoteam.info\\\/me\\\/\",\"name\":\"Devoteam\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/devoteam.info\\\/me\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-SA\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Every Frontend Needs Its Backend: OAuth2 Token Security in Single-Page Applications | Devoteam","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:\/\/devoteam.info\/me\/expert-view\/every-frontend-needs-its-backend\/","og_locale":"en_US","og_type":"article","og_title":"Every Frontend Needs Its Backend: OAuth2 Token Security in Single-Page Applications","og_description":"The world of web development has changed a lot in the last decade. We&#8217;ve moved from traditional, multi-page websites that build pages on a server, to single-page applications (SPAs), which have become a popular way to build websites. While old-school sites need to reload the entire page for every user action, causing noticeable delays, SPAs [&hellip;]","og_url":"https:\/\/devoteam.info\/me\/expert-view\/every-frontend-needs-its-backend\/","og_site_name":"Devoteam","og_image":[{"width":1536,"height":1024,"url":"https:\/\/devoteam.info\/wp-content\/uploads\/2025\/08\/Visual-1-Blog-post-v3.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/devoteam.info\/me\/expert-view\/every-frontend-needs-its-backend\/","url":"https:\/\/devoteam.info\/me\/expert-view\/every-frontend-needs-its-backend\/","name":"Every Frontend Needs Its Backend: OAuth2 Token Security in Single-Page Applications | Devoteam","isPartOf":{"@id":"https:\/\/devoteam.info\/me\/#website"},"primaryImageOfPage":{"@id":"https:\/\/devoteam.info\/me\/expert-view\/every-frontend-needs-its-backend\/#primaryimage"},"image":{"@id":"https:\/\/devoteam.info\/me\/expert-view\/every-frontend-needs-its-backend\/#primaryimage"},"thumbnailUrl":"https:\/\/devoteam.info\/wp-content\/uploads\/2025\/08\/Visual-1-Blog-post-v3-1024x683.jpg","datePublished":"2025-08-07T08:49:04+00:00","breadcrumb":{"@id":"https:\/\/devoteam.info\/me\/expert-view\/every-frontend-needs-its-backend\/#breadcrumb"},"inLanguage":"en-SA","potentialAction":[{"@type":"ReadAction","target":["https:\/\/devoteam.info\/me\/expert-view\/every-frontend-needs-its-backend\/"]}]},{"@type":"ImageObject","inLanguage":"en-SA","@id":"https:\/\/devoteam.info\/me\/expert-view\/every-frontend-needs-its-backend\/#primaryimage","url":"https:\/\/devoteam.info\/wp-content\/uploads\/2025\/08\/Visual-1-Blog-post-v3-1024x683.jpg","contentUrl":"https:\/\/devoteam.info\/wp-content\/uploads\/2025\/08\/Visual-1-Blog-post-v3-1024x683.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/devoteam.info\/me\/expert-view\/every-frontend-needs-its-backend\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/devoteam.info\/me\/"},{"@type":"ListItem","position":2,"name":"Expert View","item":"https:\/\/devoteam.info\/me\/expert-view\/"},{"@type":"ListItem","position":3,"name":"Every Frontend Needs Its Backend: OAuth2 Token Security in Single-Page Applications"}]},{"@type":"WebSite","@id":"https:\/\/devoteam.info\/me\/#website","url":"https:\/\/devoteam.info\/me\/","name":"Devoteam","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/devoteam.info\/me\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-SA"}]}},"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"aleksandra.juda","author_link":"https:\/\/devoteam.info\/me\/author\/"},"uagb_comment_info":0,"uagb_excerpt":"The world of web development has changed a lot in the last decade. We&#8217;ve moved from traditional, multi-page websites that build pages on a server, to single-page applications (SPAs), which have become a popular way to build websites. While old-school sites need to reload the entire page for every user action, causing noticeable delays, SPAs&hellip;","_links":{"self":[{"href":"https:\/\/devoteam.info\/me\/wp-json\/wp\/v2\/expert-view\/689908","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devoteam.info\/me\/wp-json\/wp\/v2\/expert-view"}],"about":[{"href":"https:\/\/devoteam.info\/me\/wp-json\/wp\/v2\/types\/expert-view"}],"version-history":[{"count":0,"href":"https:\/\/devoteam.info\/me\/wp-json\/wp\/v2\/expert-view\/689908\/revisions"}],"wp:attachment":[{"href":"https:\/\/devoteam.info\/me\/wp-json\/wp\/v2\/media?parent=689908"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devoteam.info\/me\/wp-json\/wp\/v2\/categories?post=689908"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devoteam.info\/me\/wp-json\/wp\/v2\/tags?post=689908"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/devoteam.info\/me\/wp-json\/wp\/v2\/industry?post=689908"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}