{"componentChunkName":"component---src-templates-blog-list-template-js","path":"/127","result":{"data":{"allMarkdownRemark":{"edges":[{"node":{"excerpt":"Companies have forever relied on the data import process to get a centralized view of data and drive smarter business decisions. Even today…","fields":{"slug":"/identity/loginradius-identity-import-manager-data-migration/"},"html":"<p>Companies have forever relied on the data import process to get a centralized view of data and drive smarter business decisions. Even today, integrating data from legacy systems and other sources remains a key component of a company's identity toolbox. </p>\n<p>The LoginRadius Identity Import Manager is a flexible tool that allows companies to import and manage multiple customer profile data from any different application, service, or database into the LoginRadius database via CSV files. </p>\n<p>With the new feature, companies can be confident about the consistency and accuracy of the imported data.</p>\n<h2 id=\"intent-behind-the-launch\" style=\"position:relative;\"><a href=\"#intent-behind-the-launch\" aria-label=\"intent behind the launch permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Intent Behind the Launch </h2>\n<p>LoginRadius understands that when companies take more time to migrate the data from legacy systems, it increases their go-to-market time. With the Identity Import Manager, we aim to automate the migration process with 100% precision.</p>\n<p>We understand data import and update requirements. We tightly connect different data elements with a unified user profile.</p>\n<p>Other benefits of the LoginRadius Identity Import Manager include:</p>\n<ul>\n<li>It is easier and faster than traditional methods that move data by writing codes manually </li>\n<li>It improves data professionals' productivity as it codifies and reuses processes that move data without any technical intervention. </li>\n<li>It offers a robust built-in-error handling functionality that empowers companies to build well-instrumented data warehousing systems.</li>\n</ul>\n<p><a href=\"https://loginradius.com/resource/loginradius-identity-import-manager\"><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 30.307692307692307%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsTAAALEwEAmpwYAAABe0lEQVQY0z2QvUtCURjGb1DqvWF+IKJRKmpqfhWp5dXU/ColhSKphsaCdAlaHGoICqohCPoH2hpqkSAoqGhxqIaW/oKoyJq0IRefzj1+vPDjHHif8zzvexjWMgkBjtBrCxHCnZOzNnttJOYAOEcMCl8WSlcMrJ1gi4AdCkLS0jDUzBqCaiQBuTMK6XCEEIbMGYPam0affQoS8qBpyINzJaGLr8ARX4TYN48eZxIsCaJ9omPa6f2+NKyRBej8GcrgxCzk7gSkLUOxOQiZIwoDn4XWMw2NNwU90Rj4DFSjyU4oI1yECfVEaIvmYCGmRoIhOAdzJAelO07MmhN0G/1QuOLQeFLQegXSUI/NQGTiaWBnZZEpgNLNA6rVGt7eP/BZ+cZX5QfV2i9CuTUwOh+69OPY2DnC48srzkrXOD2/pNyVn3BxdUuDBWOGo4Y87svPEOqvXkej0QAESEWX1sEMeKgmtpxHcf8Ehe1DFLYOkCds7h5jtbhH/1rY5B8maN+Ee1N5aAAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"DS ETL Services 1\"\n        title=\"DS ETL Services 1\"\n        src=\"/static/da419fb84cbb3d62531dbd25b58bdea8/e5715/DS-ETL-Services-1.png\"\n        srcset=\"/static/da419fb84cbb3d62531dbd25b58bdea8/a6d36/DS-ETL-Services-1.png 650w,\n/static/da419fb84cbb3d62531dbd25b58bdea8/e5715/DS-ETL-Services-1.png 768w,\n/static/da419fb84cbb3d62531dbd25b58bdea8/2bef9/DS-ETL-Services-1.png 1024w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></a></p>\n<h2 id=\"core-capabilities-of-loginradius-identity-import-manager\" style=\"position:relative;\"><a href=\"#core-capabilities-of-loginradius-identity-import-manager\" aria-label=\"core capabilities of loginradius identity import manager permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Core Capabilities of LoginRadius Identity Import Manager</h2>\n<ul>\n<li><strong>Data Migration Operation</strong>: It imports new data and updates and deletes existing data migration. It also supports automatic mapping with LoginRadius fields. </li>\n<li><strong>Data Integration</strong>: It offers a single and unified view with a real-time progress update along with consolidated structured and unstructured data from multiple sources.</li>\n<li><strong>Data Compliance</strong>: It provides reliable <a href=\"https://www.loginradius.com/compliances-list/\">data protection capabilities</a> through alignment with the NIST SP 800-53 component. Other certifications include SOC2 Type ll, PCI DSS, ISO 27001, and 27018 with ISO 27001:2013.</li>\n<li><strong>ETL Optimization</strong>: It optimizes existing ETL processes to improve performance, reduce data points, and decrease resource usage.</li>\n<li><strong>Log File Protection</strong>: Log files can be protected with a password, using the set log file password field.</li>\n<li><strong>Redundancy Verification</strong>: Redundancy is avoided using the Lookup Type, which locates the customer profile that needs to be added, modified, or deleted, to prevent duplicate profile.</li>\n<li><strong>Data ETL Logs</strong>: It shows the history of migrated data requests and the log download links. Logs contain details such as the start date, the expiry date of downloaded files, the status of the data process, etc.</li>\n<li><strong>Flexible tools</strong>: It is equipped with state-of-the-art solutions that excel in addressing the exponential growth of various data sources and is designed to work with structured and unstructured data.</li>\n</ul>\n<h2 id=\"a-final-word\" style=\"position:relative;\"><a href=\"#a-final-word\" aria-label=\"a final word permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>A Final Word</h2>\n<p>Companies produce a wide range of data in a variety of forms that may not be fully integrated. Additionally, they collect data from external sources that they require to import into their systems. </p>\n<p>The Identity Import Manager is a built-in feature of the LoginRadius <a href=\"https://www.loginradius.com/blog/identity/customer-identity-and-access-management/\">customer identity and access management</a> platform that offers frictionless access and integration of data for effective and accurate data processing.</p>\n<p><a href=\"https://www.loginradius.com/book-a-demo/\"><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 30.307692307692307%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsTAAALEwEAmpwYAAABbElEQVQY0zVQO0/CUBQmaihthUbRhPhCAlhKEXlE3s+CCEaBwQF10riQODkwaFyMMcTFwR9gjBvRSeKko4NxcfD/fJ57C8PJbc53+r0soj8Lm5qHbS0HW6AIwZ+DXSvAESxBpJ3MMLph3+xWDlUwm2jCGa5A0isQtRIkhrH/CbdwwkDBHAJlGodexsy6wUkduknMBCfdmxCCBhZKHailfUxGm5jQKphaTUDwmaIWdigyF1oZsm7AFavBRspKuMpdTJMQO5yLbCHVPkG0cYRY4xAR9tbp3T5AsnUMT7YFqzdtOuQOSFmiyMupXUihKuzk0hWvc0xgUYlYod18tAZPrg13eg8rNIuJHSihMtVUHEUe51cLPJ5zo8oJJRJQRnHlQB6WpTjOru7w/fuH59d3PL0M8Th4w+fXDwbDD16R1ZsxCcelsyUbidQEEuC9ECap1J8nCaPTRe/2Ad3LvjkXfZxf3+O0d8P7FnwZ/AMzEsMp2f6LdQAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"book-a-free-demo-loginradius\"\n        title=\"book-a-free-demo-loginradius\"\n        src=\"/static/779ad148d33fb1ecfd80cc41f1a94ef3/e5715/Book-a-free-demo-request.png\"\n        srcset=\"/static/779ad148d33fb1ecfd80cc41f1a94ef3/a6d36/Book-a-free-demo-request.png 650w,\n/static/779ad148d33fb1ecfd80cc41f1a94ef3/e5715/Book-a-free-demo-request.png 768w,\n/static/779ad148d33fb1ecfd80cc41f1a94ef3/2bef9/Book-a-free-demo-request.png 1024w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></a></p>\n<style class=\"grvsc-styles\">\n  .grvsc-container {\n    overflow: auto;\n    -webkit-overflow-scrolling: touch;\n    padding-top: 1rem;\n    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));\n    padding-bottom: 1rem;\n    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));\n    border-radius: 8px;\n    border-radius: var(--grvsc-border-radius, 8px);\n    font-feature-settings: normal;\n  }\n  \n  .grvsc-code {\n    display: inline-block;\n    min-width: 100%;\n  }\n  \n  .grvsc-line {\n    display: inline-block;\n    box-sizing: border-box;\n    width: 100%;\n    padding-left: 1.5rem;\n    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));\n    padding-right: 1.5rem;\n    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));\n  }\n  \n  .grvsc-line-highlighted {\n    background-color: var(--grvsc-line-highlighted-background-color, transparent);\n    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, transparent);\n  }\n  \n</style>","frontmatter":{"date":"July 15, 2020","updated_date":null,"description":"The LoginRadius Identity Import Manager is a flexible tool that allows companies to import and manage multiple customer profile data from any different application, service, or database.","title":"LoginRadius Identity Import Manager, An Automated Feature for Seamless Data Migration","tags":["customer-experience"],"pinned":null,"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1.408450704225352,"src":"/static/5d3bd8cd2fff462ba1a427e466bcd68e/9a31d/LoginRadius-Identity-Import.jpg","srcSet":"/static/5d3bd8cd2fff462ba1a427e466bcd68e/f836f/LoginRadius-Identity-Import.jpg 200w,\n/static/5d3bd8cd2fff462ba1a427e466bcd68e/2244e/LoginRadius-Identity-Import.jpg 400w,\n/static/5d3bd8cd2fff462ba1a427e466bcd68e/9a31d/LoginRadius-Identity-Import.jpg 767w","sizes":"(max-width: 767px) 100vw, 767px"}}},"author":{"id":"Rakesh Soni","github":"oyesoni","avatar":"rakesh-soni.jpg"}}}},{"node":{"excerpt":"Have you ever heard of SonarQube? Would you like to know What it is? And how to use it? And its benefits to the production phase of software…","fields":{"slug":"/engineering/sonarqube/"},"html":"<p>Have you ever heard of SonarQube? Would you like to know What it is? And how to use it? And its benefits to the production phase of software development. Then you are at the right place; in this tutorial of SonarQube, I will give you a walkthrough of every aspect of SonarQube.</p>\n<p>Let's dive in!!!</p>\n<h2 id=\"what-is-sonarqube\" style=\"position:relative;\"><a href=\"#what-is-sonarqube\" aria-label=\"what is sonarqube permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>What is SonarQube?</h2>\n<p>SonarQube is an open-source platform developed by SonarSource for continuous inspection of code quality. Sonar does static code analysis, which provides a detailed report of bugs, code smells, vulnerabilities, code duplications. </p>\n<p>It supports 25+ major programming languages through built-in rulesets and can also be extended with various plugins.</p>\n<h2 id=\"benefits-of-sonarqube\" style=\"position:relative;\"><a href=\"#benefits-of-sonarqube\" aria-label=\"benefits of sonarqube permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Benefits of SonarQube</h2>\n<ol>\n<li><strong>Sustainability</strong> - Reduces complexity, possible vulnerabilities, and code duplications, optimising the life of applications.</li>\n<li><strong>Increase productivity</strong> - Reduces the scale, cost of maintenance, and risk of the application; as such, it removes the need to spend more time changing the code</li>\n<li><strong>Quality code</strong> - Code quality control is an inseparable part of the process of software development.</li>\n<li><strong>Detect Errors</strong> - Detects errors in the code and alerts developers to fix them automatically before submitting them for output.</li>\n<li><strong>Increase consistency</strong> - Determines where the code criteria are breached and enhances the quality</li>\n<li><strong>Business scaling</strong> - No restriction on the number of projects to be evaluated</li>\n<li><strong>Enhance developer skills</strong> - Regular feedback on quality problems helps developers to improve their coding skills</li>\n</ol>\n<h2 id=\"why-sonarqube\" style=\"position:relative;\"><a href=\"#why-sonarqube\" aria-label=\"why sonarqube permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Why SonarQube?</h2>\n<p>Developers <a href=\"/agile-development-team/\">working with hard deadlines</a> to deliver the required functionality to the customer. It is so important for developers that many times they compromise with the code quality, potential bugs, code duplications, and bad distribution of complexity.</p>\n<p>Additionally, they tend to leave unused variables, methods, etc. In this scenario, the code would work in the desired way.</p>\n<p>Do you think this is a proper way to deliver functionality? </p>\n<p>The answer is NO.</p>\n<p>To avoid these issues in code, developers should always follow the good coding practice, but sometimes it is not possible to follow the rules and maintain the good quality as there may be many reasons.</p>\n<p>In order to achieve continuous code integration and deployment, developers need a tool that not only works once to check and tell them the problems in the code but also to track and control the code to check continuous code quality. To satisfy all these requirements, here comes SonarQube in the picture.</p>\n<h2 id=\"how-to-setup-and-use-the-sonarqube-plugin\" style=\"position:relative;\"><a href=\"#how-to-setup-and-use-the-sonarqube-plugin\" aria-label=\"how to setup and use the sonarqube plugin permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>How to setup and use the sonarqube plugin</h2>\n<p>This section will explain the steps or procedures to configure the sonarqube plugin for all the major programming languages.</p>\n<h3 id=\"prerequisites\" style=\"position:relative;\"><a href=\"#prerequisites\" aria-label=\"prerequisites permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Prerequisites:</h3>\n<p>The only prerequisite for running SonarQube is to have Java (Oracle JRE 11 or OpenJDK 11) installed on your machine. [<a href=\"https://docs.sonarsource.com/sonarqube-server/latest/setup-and-upgrade/installation-requirements/server-host/\">details</a>]</p>\n<p>Set the PATH system variable: <a href=\"https://www.java.com/en/download/help/path.xml\">How do I set or change the PATH system variable?</a></p>\n<blockquote>\n<p>Note: In order to analyze JavaScript code, you need to have Node.js >= 8 installed on the machine running the scan. If a standard node is not available, you have to set the property <code>sonar.nodejs.executable</code> to an absolute path to Node.js executable. [<a href=\"https://docs.sonarqube.org/latest/analysis/languages/javascript/\">details</a>]</p>\n</blockquote>\n<h3 id=\"downloads-sonarqube-and-sonar-scanner\" style=\"position:relative;\"><a href=\"#downloads-sonarqube-and-sonar-scanner\" aria-label=\"downloads sonarqube and sonar scanner permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Downloads Sonarqube and Sonar Scanner:</h3>\n<ul>\n<li><a href=\"https://www.sonarqube.org/downloads\">LTS version of sonarqube</a></li>\n<li><a href=\"https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/\">Download sonar-scanner</a> based on your platform\nAfter the above process, Add the sonar scanner path to environment variables.</li>\n</ul>\n<h3 id=\"run-sonarqube-server\" style=\"position:relative;\"><a href=\"#run-sonarqube-server\" aria-label=\"run sonarqube server permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Run Sonarqube server:</h3>\n<ul>\n<li>\n<p>To start the sonar server open cmd or terminal and set sonarqube bin folder path and choose the platform and run the following command. Examples :</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"0\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">#For Windows(cmd):</span>\n<span class=\"grvsc-line\">C:\\sonarqube\\bin\\windows-x86-64&gt;StartSonar.bat</span>\n<span class=\"grvsc-line\">#For other OS (terminal): </span>\n<span class=\"grvsc-line\">C:\\sonarqube\\bin\\[OS]&gt;sonar.sh</span></code></pre>\n<p>Once the sonar server up successfully, then Log in to <code>http://localhost:9000</code> with System Administrator credentials (login=admin, password=admin).</p>\n</li>\n</ul>\n<h3 id=\"creating-and-analysing-a-project\" style=\"position:relative;\"><a href=\"#creating-and-analysing-a-project\" aria-label=\"creating and analysing a project permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Creating and Analysing a Project:</h3>\n<ul>\n<li>Go to create a new project and enter the project key, and display name details. (+ sign on the top right side).</li>\n<li>Provide a token by either generating a token or using an existing token (find existing token on  <code>http://localhost:9000/account/security</code> page).</li>\n<li>Run analysis on the project by selecting the programming language used in the repository and your system OS. </li>\n<li>As we already downloaded and set up the sonar-scanner path, No need to download it again.</li>\n<li>\n<p>Now copy the displaying command and Go to your project path and Run the copied command. It looks like below:</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"1\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">sonar-scanner.bat -D&quot;sonar.projectKey=rtetre&quot; -D&quot;sonar.sources=.&quot;-D&quot;sonar.host.url=http://localhost:9000&quot; -D&quot;sonar.login=e932dxxxxx9a8e5c7903xxxxxx96928xxxxxxx&quot;</span></code></pre>\n</li>\n</ul>\n<p>After the analysis is done, you can either browse the provided link to see the sonar report directly [Ex.: <code>http://localhost:9000/dashboard?id=</code>] or go to the project section to see the newly generated sonar report of your project. </p>\n<p>If you want to exclude some files from analysis(like test files), then go to the administration section and navigate to the General setting, select the programming language used, and set a list of file path patterns to be excluded from the analysis.</p>\n<p>Now re-run the analysis command given above for an updated sonar report.</p>\n<h2 id=\"conclusion\" style=\"position:relative;\"><a href=\"#conclusion\" aria-label=\"conclusion permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Conclusion</h2>\n<p>The goal of SonarQube is to empower developers first and to grow an open community around the quality and security of code. I hope with this quick tutorial of sonarqube you have the basic idea of the functionalities, and If you believe so, drop a comment and show your support.</p>\n<style class=\"grvsc-styles\">\n  .grvsc-container {\n    overflow: auto;\n    -webkit-overflow-scrolling: touch;\n    padding-top: 1rem;\n    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));\n    padding-bottom: 1rem;\n    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));\n    border-radius: 8px;\n    border-radius: var(--grvsc-border-radius, 8px);\n    font-feature-settings: normal;\n  }\n  \n  .grvsc-code {\n    display: inline-block;\n    min-width: 100%;\n  }\n  \n  .grvsc-line {\n    display: inline-block;\n    box-sizing: border-box;\n    width: 100%;\n    padding-left: 1.5rem;\n    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));\n    padding-right: 1.5rem;\n    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));\n  }\n  \n  .grvsc-line-highlighted {\n    background-color: var(--grvsc-line-highlighted-background-color, transparent);\n    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, transparent);\n  }\n  \n  .dark-default-dark {\n    background-color: #1E1E1E;\n    color: #D4D4D4;\n  }\n</style>","frontmatter":{"date":"July 11, 2020","updated_date":null,"description":"SonarQube is a universal tool for static code analysis that has become more or less the industry standard. Keeping code clean, simple, and easy to read is also a lot easier with SonarQube.","title":"Sonarqube: What it is and why to use it?","tags":["Code Quality","SonarQube"],"pinned":null,"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1.7699115044247788,"src":"/static/d565ea49a97bb0cce8f1937aa87e64b7/ee604/sonarqube.png","srcSet":"/static/d565ea49a97bb0cce8f1937aa87e64b7/69585/sonarqube.png 200w,\n/static/d565ea49a97bb0cce8f1937aa87e64b7/497c6/sonarqube.png 400w,\n/static/d565ea49a97bb0cce8f1937aa87e64b7/ee604/sonarqube.png 800w,\n/static/d565ea49a97bb0cce8f1937aa87e64b7/f3583/sonarqube.png 1200w,\n/static/d565ea49a97bb0cce8f1937aa87e64b7/e4d72/sonarqube.png 1280w","sizes":"(max-width: 800px) 100vw, 800px"}}},"author":{"id":"Kheenvraj Lomror","github":"rajlomror","avatar":null}}}},{"node":{"excerpt":"In this blog, we’ll see how to create and validate a JWT(JSON Web Token) in Deno. For this, we’ll be using djwt, the absolute minimum…","fields":{"slug":"/engineering/jwt-authentication-with-deno/"},"html":"<p>In this blog, we’ll see how to create and validate a JWT(JSON Web Token) in Deno. For this, we’ll be using <a href=\"https://github.com/timonson/djwt\">djwt</a>, the absolute minimum library to make JSON Web Tokens in deno and <a href=\"https://deno.land/x/oak@v17.1.4\">Oak framework</a></p>\n<h2 id=\"before-you-get-started\" style=\"position:relative;\"><a href=\"#before-you-get-started\" aria-label=\"before you get started permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Before You Get Started</h2>\n<p>This tutorial assumes you have:</p>\n<ul>\n<li>A basic understanding of JavaScript and Deno</li>\n<li>Latest Deno version installed on your system</li>\n</ul>\n<h3 id=\"what-is-jwt\" style=\"position:relative;\"><a href=\"#what-is-jwt\" aria-label=\"what is jwt permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>What is JWT?</h3>\n<p>JSON Web Token is an internet standard used to create tokens for an application. These tokens hold JSON data and are cryptographically signed. </p>\n<p>Here is how a sample Json Web Token looks like</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"0\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6Im9sYXR1bmRlZ2FydWJhQGdtYWlsLmNvbSIsIm</span></code></pre>\n<p>JWT is a good way of securely sending information between parties. Because JWTs can be signed—for, you can be sure the senders are who they say they are. And, as the signature is generated using the header and the payload, you can also verify that the content hasn't been tampered with.</p>\n<p>JWT can contain user information in the payload and also can be used in the session to authenticate the user. </p>\n<p>If you want to know more about JSON Web Token, We have a very good <a href=\"/jwt/\">article</a> about it.</p>\n<h3 id=\"how-to-generate-jwt-token-in-deno\" style=\"position:relative;\"><a href=\"#how-to-generate-jwt-token-in-deno\" aria-label=\"how to generate jwt token in deno permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>How to generate JWT token in Deno</h3>\n<p>First, let's set up a Deno server to accept requests, for it, we are using <a href=\"https://deno.land/x/oak\">Oak framework</a>, it is quite simple and few lines of codes as you can see below.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"ts\" data-index=\"1\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk3\">// index.ts</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk15\">import</span><span class=\"mtk1\"> { </span><span class=\"mtk12\">Application</span><span class=\"mtk1\">, </span><span class=\"mtk12\">Router</span><span class=\"mtk1\"> } </span><span class=\"mtk15\">from</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&quot;https://deno.land/x/oak/mod.ts&quot;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk4\">const</span><span class=\"mtk1\"> </span><span class=\"mtk12\">router</span><span class=\"mtk1\"> = </span><span class=\"mtk4\">new</span><span class=\"mtk1\"> </span><span class=\"mtk10\">Router</span><span class=\"mtk1\">();</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk12\">router</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  .</span><span class=\"mtk11\">get</span><span class=\"mtk1\">(</span><span class=\"mtk8\">&quot;/&quot;</span><span class=\"mtk1\">, (</span><span class=\"mtk12\">context</span><span class=\"mtk1\">) </span><span class=\"mtk4\">=&gt;</span><span class=\"mtk1\"> {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">context</span><span class=\"mtk1\">.</span><span class=\"mtk12\">response</span><span class=\"mtk1\">.</span><span class=\"mtk12\">body</span><span class=\"mtk1\"> = </span><span class=\"mtk8\">&quot;JWT Example!&quot;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  })</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk4\">const</span><span class=\"mtk1\"> </span><span class=\"mtk12\">app</span><span class=\"mtk1\"> = </span><span class=\"mtk4\">new</span><span class=\"mtk1\"> </span><span class=\"mtk10\">Application</span><span class=\"mtk1\">();</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk12\">app</span><span class=\"mtk1\">.</span><span class=\"mtk11\">use</span><span class=\"mtk1\">(</span><span class=\"mtk12\">router</span><span class=\"mtk1\">.</span><span class=\"mtk11\">routes</span><span class=\"mtk1\">());</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk12\">app</span><span class=\"mtk1\">.</span><span class=\"mtk11\">use</span><span class=\"mtk1\">(</span><span class=\"mtk12\">router</span><span class=\"mtk1\">.</span><span class=\"mtk11\">allowedMethods</span><span class=\"mtk1\">());</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk15\">await</span><span class=\"mtk1\"> </span><span class=\"mtk12\">app</span><span class=\"mtk1\">.</span><span class=\"mtk11\">listen</span><span class=\"mtk1\">({ </span><span class=\"mtk12\">port:</span><span class=\"mtk1\"> </span><span class=\"mtk7\">8000</span><span class=\"mtk1\"> });</span></span></code></pre>\n<p>Once our program is ready for accepting request Let's import djwt functions to generate JWT token, In below code we can use a secret key, expiry time for JWT token in 1 hour from the time program will run and we are using HS256 algorithm.</p>\n<p>Add the below code in index.ts and update the router as shown below, you can now get a brand new token on <code>http://localhost:8000/generate</code></p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"ts\" data-index=\"2\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk3\">// index.ts</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">...</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk15\">import</span><span class=\"mtk1\"> { </span><span class=\"mtk12\">makeJwt</span><span class=\"mtk1\">, </span><span class=\"mtk12\">setExpiration</span><span class=\"mtk1\">, </span><span class=\"mtk12\">Jose</span><span class=\"mtk1\">, </span><span class=\"mtk12\">Payload</span><span class=\"mtk1\"> } </span><span class=\"mtk15\">from</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&quot;https://deno.land/x/djwt/create.ts&quot;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk4\">const</span><span class=\"mtk1\"> </span><span class=\"mtk12\">key</span><span class=\"mtk1\"> = </span><span class=\"mtk8\">&quot;secret-key&quot;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk4\">const</span><span class=\"mtk1\"> </span><span class=\"mtk12\">payload</span><span class=\"mtk1\">: </span><span class=\"mtk10\">Payload</span><span class=\"mtk1\"> = {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  </span><span class=\"mtk12\">iss:</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&quot;Jon Doe&quot;</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  </span><span class=\"mtk12\">exp:</span><span class=\"mtk1\"> </span><span class=\"mtk11\">setExpiration</span><span class=\"mtk1\">(</span><span class=\"mtk4\">new</span><span class=\"mtk1\"> </span><span class=\"mtk10\">Date</span><span class=\"mtk1\">().</span><span class=\"mtk11\">getTime</span><span class=\"mtk1\">() + </span><span class=\"mtk7\">60000</span><span class=\"mtk1\">),</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">};</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk4\">const</span><span class=\"mtk1\"> </span><span class=\"mtk12\">header</span><span class=\"mtk1\">: </span><span class=\"mtk10\">Jose</span><span class=\"mtk1\"> = {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  </span><span class=\"mtk12\">alg:</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&quot;HS256&quot;</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  </span><span class=\"mtk12\">typ:</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&quot;JWT&quot;</span><span class=\"mtk1\">,</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">};</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk4\">const</span><span class=\"mtk1\"> </span><span class=\"mtk12\">router</span><span class=\"mtk1\"> = </span><span class=\"mtk4\">new</span><span class=\"mtk1\"> </span><span class=\"mtk10\">Router</span><span class=\"mtk1\">();</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk12\">router</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  .</span><span class=\"mtk11\">get</span><span class=\"mtk1\">(</span><span class=\"mtk8\">&quot;/&quot;</span><span class=\"mtk1\">, (</span><span class=\"mtk12\">context</span><span class=\"mtk1\">) </span><span class=\"mtk4\">=&gt;</span><span class=\"mtk1\"> {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">context</span><span class=\"mtk1\">.</span><span class=\"mtk12\">response</span><span class=\"mtk1\">.</span><span class=\"mtk12\">body</span><span class=\"mtk1\"> = </span><span class=\"mtk8\">&quot;JWT Example!&quot;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  })</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  .</span><span class=\"mtk11\">get</span><span class=\"mtk1\">(</span><span class=\"mtk8\">&quot;/generate&quot;</span><span class=\"mtk1\">, (</span><span class=\"mtk12\">context</span><span class=\"mtk1\">) </span><span class=\"mtk4\">=&gt;</span><span class=\"mtk1\"> {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">context</span><span class=\"mtk1\">.</span><span class=\"mtk12\">response</span><span class=\"mtk1\">.</span><span class=\"mtk12\">body</span><span class=\"mtk1\"> = </span><span class=\"mtk11\">makeJwt</span><span class=\"mtk1\">({ </span><span class=\"mtk12\">header</span><span class=\"mtk1\">, </span><span class=\"mtk12\">payload</span><span class=\"mtk1\">, </span><span class=\"mtk12\">key</span><span class=\"mtk1\"> }) + </span><span class=\"mtk8\">&quot;</span><span class=\"mtk6\">\\n</span><span class=\"mtk8\">&quot;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  })</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">...</span></span></code></pre>\n<h3 id=\"validating-a-jwt-token\" style=\"position:relative;\"><a href=\"#validating-a-jwt-token\" aria-label=\"validating a jwt token permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Validating a JWT token</h3>\n<p>Once you get a JWT token you can validate the token by <code>validateJwt</code> function in djwt, let us import the validateJwt and add one more route <code>/validate/:token</code></p>\n<p>Now you can verify any token by passing it to a route like - <code>http://localhost:8000/validate/jwt_token</code> (jwt_token is a placeholder, please replace it with a real JWT token)</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"ts\" data-index=\"3\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk3\">// index.ts</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">...</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk15\">import</span><span class=\"mtk1\"> { </span><span class=\"mtk12\">validateJwt</span><span class=\"mtk1\"> } </span><span class=\"mtk15\">from</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&quot;https://deno.land/x/djwt/validate.ts&quot;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">...</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk12\">router</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  .</span><span class=\"mtk11\">get</span><span class=\"mtk1\">(</span><span class=\"mtk8\">&quot;/&quot;</span><span class=\"mtk1\">, (</span><span class=\"mtk12\">context</span><span class=\"mtk1\">) </span><span class=\"mtk4\">=&gt;</span><span class=\"mtk1\"> {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">context</span><span class=\"mtk1\">.</span><span class=\"mtk12\">response</span><span class=\"mtk1\">.</span><span class=\"mtk12\">body</span><span class=\"mtk1\"> = </span><span class=\"mtk8\">&quot;JWT Example!&quot;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  })</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  .</span><span class=\"mtk11\">get</span><span class=\"mtk1\">(</span><span class=\"mtk8\">&quot;/generate&quot;</span><span class=\"mtk1\">, (</span><span class=\"mtk12\">context</span><span class=\"mtk1\">) </span><span class=\"mtk4\">=&gt;</span><span class=\"mtk1\"> {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk12\">context</span><span class=\"mtk1\">.</span><span class=\"mtk12\">response</span><span class=\"mtk1\">.</span><span class=\"mtk12\">body</span><span class=\"mtk1\"> = </span><span class=\"mtk11\">makeJwt</span><span class=\"mtk1\">({ </span><span class=\"mtk12\">header</span><span class=\"mtk1\">, </span><span class=\"mtk12\">payload</span><span class=\"mtk1\">, </span><span class=\"mtk12\">key</span><span class=\"mtk1\"> }) + </span><span class=\"mtk8\">&quot;</span><span class=\"mtk6\">\\n</span><span class=\"mtk8\">&quot;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  })</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  .</span><span class=\"mtk11\">get</span><span class=\"mtk1\">(</span><span class=\"mtk8\">&quot;/validate/:token&quot;</span><span class=\"mtk1\">, </span><span class=\"mtk4\">async</span><span class=\"mtk1\"> (</span><span class=\"mtk12\">context</span><span class=\"mtk1\">) </span><span class=\"mtk4\">=&gt;</span><span class=\"mtk1\"> {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    </span><span class=\"mtk15\">if</span><span class=\"mtk1\"> ( </span><span class=\"mtk12\">context</span><span class=\"mtk1\">.</span><span class=\"mtk12\">params</span><span class=\"mtk1\"> && </span><span class=\"mtk12\">context</span><span class=\"mtk1\">.</span><span class=\"mtk12\">params</span><span class=\"mtk1\">.</span><span class=\"mtk12\">token</span><span class=\"mtk1\"> && (</span><span class=\"mtk15\">await</span><span class=\"mtk1\"> </span><span class=\"mtk11\">validateJwt</span><span class=\"mtk1\">(</span><span class=\"mtk12\">context</span><span class=\"mtk1\">.</span><span class=\"mtk12\">params</span><span class=\"mtk1\">.</span><span class=\"mtk12\">token</span><span class=\"mtk1\">, </span><span class=\"mtk12\">key</span><span class=\"mtk1\">)).</span><span class=\"mtk12\">isValid</span><span class=\"mtk1\">) {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">      </span><span class=\"mtk12\">context</span><span class=\"mtk1\">.</span><span class=\"mtk12\">response</span><span class=\"mtk1\">.</span><span class=\"mtk12\">body</span><span class=\"mtk1\"> = </span><span class=\"mtk8\">&quot;Valid JWT</span><span class=\"mtk6\">\\n</span><span class=\"mtk8\">&quot;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    } </span><span class=\"mtk15\">else</span><span class=\"mtk1\"> {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">      </span><span class=\"mtk12\">context</span><span class=\"mtk1\">.</span><span class=\"mtk12\">response</span><span class=\"mtk1\">.</span><span class=\"mtk12\">body</span><span class=\"mtk1\"> = </span><span class=\"mtk8\">&quot;Invalid JWT</span><span class=\"mtk6\">\\n</span><span class=\"mtk8\">&quot;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">    }</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">  });</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">...</span></span></code></pre>\n<p>Now you know how to generate and verify a JWT token in Deno, you can easily use it in your application, The complete source code used in this blog can be found in this <a href=\"https://github.com/LoginRadius/engineering-blog-samples/tree/master/Deno/JWTAuthentication\">Github Repo</a></p>\n<style class=\"grvsc-styles\">\n  .grvsc-container {\n    overflow: auto;\n    -webkit-overflow-scrolling: touch;\n    padding-top: 1rem;\n    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));\n    padding-bottom: 1rem;\n    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));\n    border-radius: 8px;\n    border-radius: var(--grvsc-border-radius, 8px);\n    font-feature-settings: normal;\n  }\n  \n  .grvsc-code {\n    display: inline-block;\n    min-width: 100%;\n  }\n  \n  .grvsc-line {\n    display: inline-block;\n    box-sizing: border-box;\n    width: 100%;\n    padding-left: 1.5rem;\n    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));\n    padding-right: 1.5rem;\n    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));\n  }\n  \n  .grvsc-line-highlighted {\n    background-color: var(--grvsc-line-highlighted-background-color, transparent);\n    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, transparent);\n  }\n  \n  .dark-default-dark {\n    background-color: #1E1E1E;\n    color: #D4D4D4;\n  }\n  .dark-default-dark .mtk3 { color: #6A9955; }\n  .dark-default-dark .mtk15 { color: #C586C0; }\n  .dark-default-dark .mtk1 { color: #D4D4D4; }\n  .dark-default-dark .mtk12 { color: #9CDCFE; }\n  .dark-default-dark .mtk8 { color: #CE9178; }\n  .dark-default-dark .mtk4 { color: #569CD6; }\n  .dark-default-dark .mtk10 { color: #4EC9B0; }\n  .dark-default-dark .mtk11 { color: #DCDCAA; }\n  .dark-default-dark .mtk7 { color: #B5CEA8; }\n  .dark-default-dark .mtk6 { color: #D7BA7D; }\n</style>","frontmatter":{"date":"July 10, 2020","updated_date":null,"description":null,"title":"How to create and validate JSON Web Tokens in Deno","tags":["Deno","JWT","JSON Web Token"],"pinned":null,"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1.492537313432836,"src":"/static/4f62fb01daec253b0246b5ba0f244846/ee604/deno_jwt.png","srcSet":"/static/4f62fb01daec253b0246b5ba0f244846/69585/deno_jwt.png 200w,\n/static/4f62fb01daec253b0246b5ba0f244846/497c6/deno_jwt.png 400w,\n/static/4f62fb01daec253b0246b5ba0f244846/ee604/deno_jwt.png 800w","sizes":"(max-width: 800px) 100vw, 800px"}}},"author":{"id":"Puneet Singh","github":"puneetsingh24","avatar":null}}}},{"node":{"excerpt":"Cloud Cost Optimization is the method of reducing the total cloud spending by finding mismanaged capital and scale-up of Right Sizing…","fields":{"slug":"/engineering/cloud-cost-optimization/"},"html":"<p>Cloud Cost Optimization is the method of reducing the total cloud spending by finding mismanaged capital and scale-up of Right Sizing computing services. CCO only charge for the services you use, the cloud gives companies infinite scalability and lower IT costs.</p>\n<ol>\n<li>As per Gartner <a href=\"https://www.gartner.com/smarterwithgartner/4-trends-impacting-cloud-adoption-in-2020/\">report</a> cloud cost optimization is the first factor that will impact cloud adoption in 2020. Also Gartner predicts <em>\"75% of midsize and large organizations will have adopted a multi-cloud and/or hybrid IT strategy in 2021.\"</em></li>\n<li>As <a href=\"https://research.g2.com/insights/2020-trends/it-cloud-computing-trends-2020\">per G2</a> <em>\"General necessity for a broad hardware stack will fade away as solutions become increasingly cloud-driven, virtualized, and software-defined. “Appliance-attached” solutions will decline in favor of dedicated, pure software solutions performing similar functions.</em></li>\n</ol>\n<h2 id=\"infrastructure-journey\" style=\"position:relative;\"><a href=\"#infrastructure-journey\" aria-label=\"infrastructure journey permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Infrastructure Journey</h2>\n<h3 id=\"on-premise\" style=\"position:relative;\"><a href=\"#on-premise\" aria-label=\"on premise permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>On-Premise</h3>\n<p>On-Premise Infrastructure was only option around 10 years ago but managing On-premise Infrastructure include the extra cost with other challenges, Challenges are Network, Hardware, Cooling, Power, Space also needed technical staff for taking care all infrastructure</p>\n<h3 id=\"colocation\" style=\"position:relative;\"><a href=\"#colocation\" aria-label=\"colocation permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Colocation</h3>\n<p>The Colocation is when a business places its own server in a third-party data center and uses its infrastructure services. Colocation takes responsibility for Network, Hardware, Cooling, Space also business not need to worry about technical man force for managing servers</p>\n<p>Still business have more challenges OS software, Application security, Data storage   </p>\n<h3 id=\"cloud\" style=\"position:relative;\"><a href=\"#cloud\" aria-label=\"cloud permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Cloud</h3>\n<p>The Cloud service provider is providing solutions for all the challenges. The cloud service provider takes total responsibility for hardware, network, space, power, maintaining, and security also they are managing all technical workforce for the whole infrastructure </p>\n<p>  <span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 44.30769230769231%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAABibAAAYmwFJdYOUAAABsklEQVQoz3VRW0/bMBTO79zEL4BRXsbTkAaISWjSEBqMgoQAFdSXoV2A0hSqce0tlAYSSlLSpWqD1pA6hSZ1brUzux2T9rDPn46Pj8/nYx8z4b/we57eaRAatqZbjYeOhhAK/wMGPQNjmtR8rK8L49FCZOHkVbQ4uilOuK5L4jQBBSH2e4GLsR/igIpt24YQdruw1pTVpnTT4FJS7Lu49PX6U6K8ypY3pDp/pwlGGwS2gtrpVo2FeiqEJSr2PI9MpOrG5ZvZo6FoYSxZXlvKjX3MDn/m57aFD9OJF+8OX0oGR+vjHrFd28KIOozv++RC0HZ59Sxb2S8oB6LK5SpsppIoVU+v1PO8cpBXdsCvlHV/AerZ4JGDlo7pkzHjB2Sg/M/k4V3sRzXO14/Pa1/SSiyjfrvSTtJVGhQap8fy/C4/mRLfG3rJ6T7hvpqKkY9ZeX0xN7LMRfaklbg4tZAb3rp+m5RXl4sRQlZe2xSmV4qv47cz94bmOt6guwzpFuknAMBsm6YJTLMNTOpTS9fgjwNafdPqdJ4sy8L90lTsDABdSqdPciB1noPQcZ2/uxSDf/4NQFnX10FOuqYAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"infra 1\"\n        title=\"infra 1\"\n        src=\"/static/64703cac970eff2098f5a2c2b2caf53d/e5715/infra1.png\"\n        srcset=\"/static/64703cac970eff2098f5a2c2b2caf53d/a6d36/infra1.png 650w,\n/static/64703cac970eff2098f5a2c2b2caf53d/e5715/infra1.png 768w,\n/static/64703cac970eff2098f5a2c2b2caf53d/1ff84/infra1.png 1040w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h2 id=\"how-to-reduce-cloud-cost\" style=\"position:relative;\"><a href=\"#how-to-reduce-cloud-cost\" aria-label=\"how to reduce cloud cost permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>How to Reduce Cloud Cost</h2>\n<p>Reducing Cloud cost is not a one time task. it is a recurring process. We need to identify underutilized resources, Right size machine, reserving capacity for higher discounts also need to optimization Application for reducing hardware cost. Let's start </p>\n<h3 id=\"choose-the-right-cloud-provider\" style=\"position:relative;\"><a href=\"#choose-the-right-cloud-provider\" aria-label=\"choose the right cloud provider permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Choose the Right Cloud Provider</h3>\n<p>Cloud infrastructure is increasing day by day. Choosing the right cloud provider is the most important decision for long term success. The big three cloud providers are  Amazon Web Services (AWS), Microsoft Azure, and Google Cloud Platform (GCP). These three cloud providers are providing mostly services so they might be confused about choosing the right cloud provider. We can easily evaluate the right cloud provider from the following steps</p>\n<ul>\n<li>Compliance</li>\n<li>Security </li>\n<li>Downtime</li>\n<li>Support</li>\n<li>Pricing structure</li>\n<li>Location wise availability </li>\n</ul>\n<h3 id=\"discounted-instances\" style=\"position:relative;\"><a href=\"#discounted-instances\" aria-label=\"discounted instances permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Discounted Instances</h3>\n<p>All Big Cloud Providers are providing discounted Instances or spot instances. Spot instances are unused instances. Cloud Providers offered up to 90% discount on these instances compared to on-demand or reserved instances. The majority of organizations have some workloads that are not critical, We can reduce the cost for not critical workload by using spot instances. AWS, Azure, and Google (GCP) all provide the option to use Spot Instances.</p>\n<ul>\n<li>AWS Spot Instances </li>\n<li>Azure Low Priority VMS</li>\n<li>GCP Preemptible VMS</li>\n</ul>\n<h3 id=\"identify-instance-right-size\" style=\"position:relative;\"><a href=\"#identify-instance-right-size\" aria-label=\"identify instance right size permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Identify Instance Right Size</h3>\n<p>Identify the right size for the Instance, not an easy task. We need to configure multiple matrices in our cloud service provider. Key metrics to look for are CPU and memory usage. Identify instances with a maximum CPU usage and memory usage of the month.</p>\n<h2 id=\"how-to-check-metrics\" style=\"position:relative;\"><a href=\"#how-to-check-metrics\" aria-label=\"how to check metrics permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>How to Check Metrics</h2>\n<p>Generally, people make mistakes during checking metrics. Most of the people prefer averages in monitoring but averages mislead the measurement. Let understand this by example </p>\n<p>You are running an online technology tutorial site. Suppose 1million active users on your website in normal days. Now you are hosting weekly technology webinars in your platform. During webinars time your platform traffic should increase. At that time CPU usages and memory usages should be high compared to the rest of the time. Now suppose you have checked the 24 hours average CPU usages and memory usages. It was around 40% and you have decided this is underutilized and scale down the lower size instance. It can impact you 5% - 10% traffic Let’s look at a real-world example. This chart shows the overall CPU usages </p>\n<p>  <span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 25.23076923076923%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAYAAABFA8wzAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAjUlEQVQY032PWQpDIQxF3f/uuoN+FTq9ah3iEL1Vn1JaeAYOIebmgIKIUEpZ0upox8w/CO/9UsQ5I3JeSlt05kWzHpW0AZoiQjrO/Jdo5phyP5rEinYBp/OjI41H4rGPDB9Tz8y8H2+p/kTcNoXL9d4FT6WhDGFTpkqozq27MTtIPTDf/npbKLvfUEj4ALRNiMJUPswSAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"image 1\"\n        title=\"image 1\"\n        src=\"/static/d94c819d0bac9ae9587065340e2696ae/e5715/image1.png\"\n        srcset=\"/static/d94c819d0bac9ae9587065340e2696ae/a6d36/image1.png 650w,\n/static/d94c819d0bac9ae9587065340e2696ae/e5715/image1.png 768w,\n/static/d94c819d0bac9ae9587065340e2696ae/1df5b/image1.png 1999w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>First Image showing Average CPU utilization. You can see Maximum CPU was 18.6 %</p>\n<p>Now, let’s check the CPU 99th percentile:\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 25.538461538461537%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAYAAABFA8wzAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAjklEQVQY042OSw7DIAwFuf/teoOuKvWXhkKCsU1egYCqLoJqaWQZP48wRIRt24aUOtqp6g+GmYciTQmsaSgt0Z43IoKjmpcIFxhRFP+WSdlcflCOOpxxa8Tp/KjMniDa9qwglprpeWpvkj3mNllcrvcqeFoH6wMm67Mk5Ln0tc0rZtfw3/56L7DLfhOi4AO9uojIjcQZggAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"image 2\"\n        title=\"image 2\"\n        src=\"/static/fd4ef501e6650dd11aac920e390596b8/e5715/image2.png\"\n        srcset=\"/static/fd4ef501e6650dd11aac920e390596b8/a6d36/image2.png 650w,\n/static/fd4ef501e6650dd11aac920e390596b8/e5715/image2.png 768w,\n/static/fd4ef501e6650dd11aac920e390596b8/1df5b/image2.png 1999w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>As expected, the 99th percentile is higher than the average. 99th percentile is around 93% </p>\n<p>The conclusion is We need to always check the 99th percentile. The average can mislead and it can impact your users.</p>\n<h3 id=\"creating-underutilization-alarm\" style=\"position:relative;\"><a href=\"#creating-underutilization-alarm\" aria-label=\"creating underutilization alarm permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Creating Underutilization Alarm</h3>\n<p>We can create different types of resources and applications utilization monitoring matrix and based on the data we can configure multiple alarms. You can configure notification or alarms on email, SMS from the Cloud provider dashboard. you can also configure alarms that automatically stop or terminate EC2 instances or VM when instance unused or underutilized according to the configured threshold. During the development or some POC as a developer or devops person we have to create some instances or resources but sometimes we forgot to terminate the instances or resources. You can minimize the this extra cost by creating a group of alarms that sends an email notification to developers whose instances have been underutilized or ideal for some hours, then terminates an instance. It will save the overall infra cost. different cloud providers provide different ways for creating these type alarms</p>\n<ul>\n<li><a href=\"https://aws.amazon.com/cloudwatch/features/\">Amazone (Aws)</a></li>\n<li><a href=\"https://azure.microsoft.com/en-in/blog/announcing-azure-advisor-azure-monitor-and-resource-health/\">Azure</a> </li>\n<li><a href=\"https://cloud.google.com/compute/docs/instances/viewing-and-applying-idle-vm-recommendations\">Google Cloud</a></li>\n</ul>\n<h3 id=\"creating-time-based--actions\" style=\"position:relative;\"><a href=\"#creating-time-based--actions\" aria-label=\"creating time based  actions permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Creating time based  actions</h3>\n<p>You can save around 75% cost for your Non - Production Development, Staging, and QA environment. Non - Production environment generally needed during working days. You can turn off these servers during off-hours. Cost-saving depends on the infrastructure size, it can be hundred, thousands of dollars</p>\n<p>You can create automation scripts for infrastructure deployment. Schedule the script in your cloud provider         </p>\n<h3 id=\"in-memory-cache-storage\" style=\"position:relative;\"><a href=\"#in-memory-cache-storage\" aria-label=\"in memory cache storage permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>In-memory cache Storage</h3>\n<p>Application in-memory cache reduces the cost of transferring data in the network and overall application performance because reduce the traffic between the database servers or any other external application reduce the network level cost in the cloud also caching improves  the efficiency and accessibility of data that used repeatedly or frequently accessed. Suppose your application is fetching user configuration or settings in every request from the database server. You can keep this type of configuration, which is not changing frequently in the in-memory cache. it will save a lot network-level cost </p>\n<h3 id=\"data-transfer-cost-optimization\" style=\"position:relative;\"><a href=\"#data-transfer-cost-optimization\" aria-label=\"data transfer cost optimization permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Data Transfer Cost Optimization</h3>\n<p>Data Transfer cost mostly hidden or Some time we don't take care of it. Generally, data transfer is free in the same region between different services Storage, Compute service, etc.\nIf you do a lot of cross-region transfer, it will increase your network data transfer cost also if you will deploy multiple services in the same region it will improve application performance </p>\n<h3 id=\"cost-visibility\" style=\"position:relative;\"><a href=\"#cost-visibility\" aria-label=\"cost visibility permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Cost visibility</h3>\n<p>This includes knowing what you spend in detail, how specific services are billed, and the ability to display how (or why) you spent a specific amount Here, keep in mind key capabilities such as the ability to create shared accountability, hold frequent cost reviews, analyze trends, and visualize the impact of your actions on a near-real-time basis. You can also use cost controls like budget alerts and quotas to keep your costs in check over time. </p>\n<h3 id=\"consider-a-multi-cloud-architecture\" style=\"position:relative;\"><a href=\"#consider-a-multi-cloud-architecture\" aria-label=\"consider a multi cloud architecture permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Consider a Multi-Cloud Architecture</h3>\n<p>Enterprises or Mid Level companies are adopting multi-cloud infrastructure. Consider this recent prediction from IDC: “By 2020, over 90% of enterprises will use multiple cloud services and platforms.” Or this one from 451 Research: “The future of IT is multi-cloud and hybrid with 69% of respondents planning to have some type of multi-cloud environment by 2019.”  </p>\n<h3 id=\"benefits-of-multi-cloud-architecture\" style=\"position:relative;\"><a href=\"#benefits-of-multi-cloud-architecture\" aria-label=\"benefits of multi cloud architecture permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Benefits of multi-cloud Architecture</h3>\n<ul>\n<li>Low latency</li>\n<li>Competitive Pricing</li>\n<li>more compliance options</li>\n<li>Enhanced Security </li>\n</ul>\n<h2 id=\"conclusion\" style=\"position:relative;\"><a href=\"#conclusion\" aria-label=\"conclusion permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Conclusion</h2>\n<p>Organizations need to develop a cost optimization culture and awareness. Cost optimization is an ongoing activity in the organization. Need to decide someone responsible for the cost optimization it can be an Engineering team or DevOps team. Most cloud providers provide billing alarm’s they can alert you in case of cost increment also we can configure budget in the Cloud provider dashboard.</p>\n<style class=\"grvsc-styles\">\n  .grvsc-container {\n    overflow: auto;\n    -webkit-overflow-scrolling: touch;\n    padding-top: 1rem;\n    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));\n    padding-bottom: 1rem;\n    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));\n    border-radius: 8px;\n    border-radius: var(--grvsc-border-radius, 8px);\n    font-feature-settings: normal;\n  }\n  \n  .grvsc-code {\n    display: inline-block;\n    min-width: 100%;\n  }\n  \n  .grvsc-line {\n    display: inline-block;\n    box-sizing: border-box;\n    width: 100%;\n    padding-left: 1.5rem;\n    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));\n    padding-right: 1.5rem;\n    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));\n  }\n  \n  .grvsc-line-highlighted {\n    background-color: var(--grvsc-line-highlighted-background-color, transparent);\n    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, transparent);\n  }\n  \n</style>","frontmatter":{"date":"July 09, 2020","updated_date":null,"description":"Optimization of cloud costs lowers spending by recognizing mismanaged capital, reserving higher discount space, and proper sizing.","title":"Cloud Cost Optimization in 2021","tags":["Cloud","Optmization"],"pinned":null,"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1.408450704225352,"src":"/static/2300b46e98d3db0ddac0decdc33cf57e/ee604/cloud.png","srcSet":"/static/2300b46e98d3db0ddac0decdc33cf57e/69585/cloud.png 200w,\n/static/2300b46e98d3db0ddac0decdc33cf57e/497c6/cloud.png 400w,\n/static/2300b46e98d3db0ddac0decdc33cf57e/ee604/cloud.png 800w,\n/static/2300b46e98d3db0ddac0decdc33cf57e/f3583/cloud.png 1200w,\n/static/2300b46e98d3db0ddac0decdc33cf57e/5707d/cloud.png 1600w,\n/static/2300b46e98d3db0ddac0decdc33cf57e/c1526/cloud.png 1747w","sizes":"(max-width: 800px) 100vw, 800px"}}},"author":{"id":"Vijay Singh Shekhawat","github":"code-vj","avatar":null}}}},{"node":{"excerpt":"Identity management for education has witnessed a dramatic change in the first half of 2020. As the COVID-19 pandemic spread, it resulted in…","fields":{"slug":"/identity/identity-management-for-education/"},"html":"<p>Identity management for education has witnessed a dramatic change in the first half of 2020. As the COVID-19 pandemic spread, it resulted in the shutdown of educational institutes worldwide, with <a href=\"https://en.unesco.org/covid19/educationresponse\">over 1.2 billion children</a> officially out of their physical classrooms.</p>\n<p>Interestingly, there is a notable increase in e-learning from the last couple of months. Classes are conducted remotely and on digital platforms. Now, <em>that's a massive amount of traffic to keep up with.</em></p>\n<p>Because significant amounts of highly sensitive data are involved, they make profitable targets for hackers—contact details, academic records, Social Security numbers, financial information, and health data.</p>\n<p>Many educational institutions are already facing security crises and trying their best to sustain. Providing a secure learning environment has become a high priority.</p>\n<h2 id=\"recent-stats-of-cyberattack-on-students\" style=\"position:relative;\"><a href=\"#recent-stats-of-cyberattack-on-students\" aria-label=\"recent stats of cyberattack on students permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Recent Stats of Cyberattack on Students</h2>\n<ul>\n<li>According to Darktrace's study cited on Straitstimes.com, more than 100 Singapore-based customers face <a href=\"https://www.straitstimes.com/singapore/surge-in-cyberattacks-in-singapores-education-sector-in-april\">16 times more attacks</a> on the educational institution than other healthcare and retail organizations.</li>\n<li>In June 2020, hackers attacked the servers at San Francisco School of Drugs College of California. They demanded a ransom of more than $1 million USD to get back the accessibility to their data.</li>\n<li>Professional hackers breached the ed-tech platform Unacademy and <a href=\"https://in.mashable.com/tech/13837/unacademy-data-breach-data-of-nearly-22-million-users-sold-on-dark-web\">exposed 22 million user accounts</a> on the dark web. In May 2020, Cyble Inc. stumbled upon a threat actor selling the user database for $2,000. </li>\n<li>In May 2020, another online learning application based in Canada, OneClass, suffered a data breach that <a href=\"https://siliconangle.com/2020/06/29/data-belonging-1m-students-exposed-online-study-service-oneclass/\">exposed data from more than 1 million</a> students across North America.</li>\n<li>In May 2020, a Spanish e-Learning platform 8Belts suffered a data breach that affected and <a href=\"https://www.cyclonis.com/data-breach-at-8belts-affects-150000-users-worldwide/\">exposed the data of 150,000 e-learners</a> on the platform. </li>\n</ul>\n<h2 id=\"security-challenges-in-the-education-industry\" style=\"position:relative;\"><a href=\"#security-challenges-in-the-education-industry\" aria-label=\"security challenges in the education industry permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Security Challenges in the Education Industry</h2>\n<p>By now, it is pretty evident that the education sector has become a lucrative target of cybercriminals. </p>\n<p>One of the critical reasons schools are targeted, is the extensive data they maintain about students and staff, including personally identifiable information (PII), health details, and financial data. These records are a hot commodity on the dark web and are sold in millions for identity theft and fraud.</p>\n<p>Other security challenges faced by schools, universities, and colleges in the education sector include:</p>\n<h3 id=\"limited-to-no-dedicated-it-resources\" style=\"position:relative;\"><a href=\"#limited-to-no-dedicated-it-resources\" aria-label=\"limited to no dedicated it resources permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Limited to <em>no</em> dedicated IT resources</h3>\n<p>A cybersecurity challenge faced by most educational institutions when defending their networks from threats is a shortage of dedicated IT resources—possibly pointing to the lack of funds to invest in cybersecurity. </p>\n<p>Another area that could put schools at risk of attack is the legacy IT infrastructure. IT departments must ensure that older equipment and software have the most recent upgrades, or that if manufacturers no longer support them, institutes should voluntarily install new versions.</p>\n<h3 id=\"the-unsettling-byod-culture\" style=\"position:relative;\"><a href=\"#the-unsettling-byod-culture\" aria-label=\"the unsettling byod culture permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>The unsettling BYOD culture</h3>\n<p>Institutes allow students to store data on their own devices, tablets, or laptops. Since they work on the same project in laboratories, in classrooms and at their residences, they carry their data on portable drives and connect to whichever computer is available. </p>\n<p>Most students don't invest in paid antivirus software or anti-malware versions. Also, they download free, pirated apps. So, every time they plug their infected USB into the institute's network, the whole system gets affected. </p>\n<p><a href=\"https://www.loginradius.com/resource/the-enterprise-buyers-guide-to-consumer-identity/\"><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 30.307692307692307%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsTAAALEwEAmpwYAAABd0lEQVQY001RO0/CUBitj0BbCkIxxqC8CkgFAXm0oDwDWNTBIAw6OGh0wcXEgUEWY4zBwZj4C3QzURc1MXEwcXNhcvDnHO9tAB3OvTff45zzfZfh5nKg4IN5CHIBwnxBv01ynsSzGOQpWP8y+HAZNmUDYqQMNkQgF8EFsmD7NQw9aPNkqACrLw3Bq8DkTmFqoYSZuAYLEWAD2SGhENXgqu4gXN0CpzZgjNTAkbieJ3XMQF1SVpGqNLFYrCNe2oQ7RpwQgQEhhTlUxHRCgyNZg0NZh1NdwyyBGK3A6M/+OTQShQgh0Zr7qDT2UK7vQvSnYZUUTFDCvui4lMGIW4U9VtUJ7bEVGEjvqEcdTsHQB92bGCQOXAnwzjh4VxKCR4FNUnWHdL+MM4Wj0yv0vn9w//yO24cX3D2+4vOrh6e3D92lwbf0j1DOwUz2ZyFEdvIZE76MPjJ1SJXHvGmUt1toX9zgsHOJVqeL1kkXx2fXOGifwxIq6ZP+Aohewgf4Z2UtAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Enterprise Buyer’s Guide to Consumer Identity Ebook\"\n        title=\"Enterprise Buyer’s Guide to Consumer Identity Ebook\"\n        src=\"/static/6cf3b3c14d1cbec2bf253b24dcd51704/e5715/EB-The-Enterprise-Buyer%E2%80%99s-Guide-to-Consumer-Identity.png\"\n        srcset=\"/static/6cf3b3c14d1cbec2bf253b24dcd51704/a6d36/EB-The-Enterprise-Buyer%E2%80%99s-Guide-to-Consumer-Identity.png 650w,\n/static/6cf3b3c14d1cbec2bf253b24dcd51704/e5715/EB-The-Enterprise-Buyer%E2%80%99s-Guide-to-Consumer-Identity.png 768w,\n/static/6cf3b3c14d1cbec2bf253b24dcd51704/2bef9/EB-The-Enterprise-Buyer%E2%80%99s-Guide-to-Consumer-Identity.png 1024w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></a></p>\n<h3 id=\"potential-open-network-vulnerabilities\" style=\"position:relative;\"><a href=\"#potential-open-network-vulnerabilities\" aria-label=\"potential open network vulnerabilities permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Potential open network vulnerabilities</h3>\n<p>Many educational institutions advocate a culture of an open network for students and allow any device to connect within the premises. It is done to promote freedom of free information. </p>\n<p>But then, it has its downside too. Open network means that access is not monitored correctly, making it an easy target for cybercriminals to enter the network and wreak havoc.  </p>\n<h3 id=\"lack-of-privileged-access-management\" style=\"position:relative;\"><a href=\"#lack-of-privileged-access-management\" aria-label=\"lack of privileged access management permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Lack of privileged access management</h3>\n<p>The majority of educational institutions lack a proper privileged access management system. <a href=\"https://www.loginradius.com/role-management/\">Role-based access controls (RBAC)</a> offer employees their access to different systems and data sources according to their responsibilities within the institution. </p>\n<p>Privileged accounts, like administrative accounts in schools, provide access to specific users that hold liability for critical systems and student's sensitive information.</p>\n<h3 id=\"the-ever-changing-student-lifecycle\" style=\"position:relative;\"><a href=\"#the-ever-changing-student-lifecycle\" aria-label=\"the ever changing student lifecycle permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>The ever-changing student lifecycle</h3>\n<p>With each passing year, the specific role of students in the organization changes. They are promoted to the next class, some become alumni, and some may become assistants to teachers or become teachers themselves. Some students may also hold multiple responsibilities at the same time.</p>\n<p>Educational institutions should <a href=\"https://www.loginradius.com/blog/2020/06/authentication-vs-authorization-infographic/\">authenticate these new identities</a> as soon as they transition to the new role to avoid the burden of a security breach.</p>\n<h2 id=\"type-of-cyber-attacks-faced-by-the-edtech-sector-in-managing-identities\" style=\"position:relative;\"><a href=\"#type-of-cyber-attacks-faced-by-the-edtech-sector-in-managing-identities\" aria-label=\"type of cyber attacks faced by the edtech sector in managing identities permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Type of Cyber Attacks Faced by the Edtech Sector in Managing Identities</h2>\n<p>Higher educational institutes like colleges and universities store higher volumes of sensitive data related to research and other assignments. Moreover, all institutions (—for that matter) store critical alumnus, faculty, and students' data. These are gold mines for intruders to penetrate the <a href=\"https://www.loginradius.com/blog/2020/05/cyber-threats-business-risk-covid-19/\">networks and pose cyberthreats</a>. </p>\n<p>Following are a few significant ways hackers attack the Edtech sector:</p>\n<h3 id=\"spoofing\" style=\"position:relative;\"><a href=\"#spoofing\" aria-label=\"spoofing permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Spoofing</h3>\n<p>A spoofing attack, in context to cybersecurity, happens when someone pretends to be someone else to gain trust to access sensitive network data and spread malware in the process. Spoofing attacks can occur in many different ways, like the widespread email spoofing attacks usually deployed as part of phishing campaigns or caller ID spoofing attacks that are also used to commit fraud. </p>\n<p>In educational institutions, attackers target IP address, Domain Name System ( DNS) servers, or Address Resolution Protocol (ARP) services.</p>\n<h3 id=\"password-hijacking\" style=\"position:relative;\"><a href=\"#password-hijacking\" aria-label=\"password hijacking permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Password Hijacking</h3>\n<p>Password hijacking, as the term suggests, is a type of attack where hackers gain unauthorized access to the user's login credentials. What's intriguing is hackers do not always adopt a highly technical and sophisticated approach to hack accounts. In many cases, they guess common phrases, such as \"qwerty,\" which ranks high on the <a href=\"https://www.loginradius.com/blog/2019/12/worst-passwords-list-2019/\">list of worst passwords</a>. </p>\n<p>The rest of the time, hackers make use of other methods like brute force attacks, dictionary attacks, credential stuffing attacks, etc. to hack into the educational institute's network.</p>\n<h3 id=\"credential-cracking\" style=\"position:relative;\"><a href=\"#credential-cracking\" aria-label=\"credential cracking permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Credential Cracking</h3>\n<p>Cracking of passwords occurs when a hacker deliberately targets a user or a business. They usually send a significant amount of time devising the right kind of attack to break into the victims' network.</p>\n<p>Speaking of which, while the victim of <a href=\"https://www.loginradius.com/blog/2019/09/prevent-credential-stuffing-attacks/\">credential cracking</a> can be any random user, the effort behind it also means that the victim has been deliberately targeted. It might be a business account, a company's social media accounts, or a premium educational institute with famous alumni.</p>\n<h3 id=\"phishing\" style=\"position:relative;\"><a href=\"#phishing\" aria-label=\"phishing permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Phishing</h3>\n<p>Phishing is a malware attack that tricks victims into revealing their valuable and often sensitive data. Also referred to as a \"<a href=\"https://www.loginradius.com/blog/phishing-for-identity/\">phishing scam</a>,\" attackers target login credentials of users, financial data (such as credit cards and bank account details), business data, and everything that could be of high value to hackers. </p>\n<p>Premium educational institutions have forever been at the risk of phishing attacks, primarily because of their high-value sensitive research data, student-critical data, faculty, or alumni data.</p>\n<h3 id=\"man-in-the-middle\" style=\"position:relative;\"><a href=\"#man-in-the-middle\" aria-label=\"man in the middle permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Man-in-the-middle</h3>\n<p>A man-in-the-middle attack happens when the cybercriminal intercepts a conversation between the user and the application. You can portray it as the cyber equivalent of eavesdropping done to impersonate one of the hosts. </p>\n<p>The hacker may, in this case, plant requests that seem to come from a legitimate source. For example, ask for alumni data that is otherwise deemed confidential.</p>\n<h2 id=\"data-risk-and-vulnerabilities-in-online-education-apps-and-websites\" style=\"position:relative;\"><a href=\"#data-risk-and-vulnerabilities-in-online-education-apps-and-websites\" aria-label=\"data risk and vulnerabilities in online education apps and websites permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Data Risk and Vulnerabilities in Online Education Apps and Websites</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 60.61538461538461%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAMABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAMEAv/EABUBAQEAAAAAAAAAAAAAAAAAAAAC/9oADAMBAAIQAxAAAAGah+6mYYH/xAAcEAACAAcAAAAAAAAAAAAAAAAAAQIDERIhMTL/2gAIAQEAAQUCVYBZLTqY9tn/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAYEAACAwAAAAAAAAAAAAAAAAAAEBExYf/aAAgBAQAGPwLHRC//xAAbEAACAgMBAAAAAAAAAAAAAAAAIQEREEFRYf/aAAgBAQABPyGxcx4GYpkFsTlRLZ//2gAMAwEAAgADAAAAEBAP/8QAFREBAQAAAAAAAAAAAAAAAAAAEBH/2gAIAQMBAT8Qh//EABURAQEAAAAAAAAAAAAAAAAAABAR/9oACAECAQE/EKf/xAAcEAEAAwACAwAAAAAAAAAAAAABABEhMVFBgaH/2gAIAQEAAT8QF0NcDr4uVA7OJ7wHBXIDfseKuXg7gGFT/9k='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Identity-Management-for-Education\"\n        title=\"Identity-Management-for-Education\"\n        src=\"/static/37862cb47d8ff48e9517c49e9ecfecec/212bf/Identity-Management-for-Education-1.jpg\"\n        srcset=\"/static/37862cb47d8ff48e9517c49e9ecfecec/6aca1/Identity-Management-for-Education-1.jpg 650w,\n/static/37862cb47d8ff48e9517c49e9ecfecec/212bf/Identity-Management-for-Education-1.jpg 768w,\n/static/37862cb47d8ff48e9517c49e9ecfecec/72e01/Identity-Management-for-Education-1.jpg 1024w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>Software applications – apps – are common on campuses nowadays. From in-class polling devices to driving university-wide learning management systems, educational institutions are swiftly adapting to the new trend. </p>\n<p>These apps and online platforms play a key role in assisting students and helping modern colleges to operate <a href=\"https://www.loginradius.com/blog/2020/06/consumer-data-privacy-security/\">smoothly by collecting data</a> from faculty and students alike.</p>\n<p>However, these data can be highly sensitive. Sometimes, they include data from students' personal preferences, their knowledge base, and projects they submit through these online portals.</p>\n<p>Therefore, there will always be a danger looming when new technologies and applications are widely implemented across campuses, and every student or lecturer is expected to use them.</p>\n<p>A lot of these educational apps may be useful. The school, college, or university faculty may use a few of those as supplemental instructional resources or advocate for additional skills practice.</p>\n<p>There is a catch, though! Newbie techies or tech start-ups build most of the new applications and courses launched with little to no background in children's privacy laws.</p>\n<p>Free apps are more likely to collect user data and monitor children's behaviors to deliver targeted advertising. Moreover, there have been instances where even paid apps were accused of monitoring and using child data for unethical purposes. They collect PII and track precise location information, creating a <a href=\"https://www.loginradius.com/blog/2019/10/cybersecurity-attacks-business/\">severe threat to privacy</a>.</p>\n<p>Then again, apps that claim to be specially designed for educational purposes are not immune either. Some of these apps make money by selling advertising directly on the platform or trading students and faculties' sensitive data such as ethnicity, affluence, religion, lifestyle, etc. to third parties.</p>\n<h2 id=\"compliance-regulations-for-the-education-sector\" style=\"position:relative;\"><a href=\"#compliance-regulations-for-the-education-sector\" aria-label=\"compliance regulations for the education sector permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Compliance Regulations for the Education Sector</h2>\n<p>With massive personal intellectual property at stake, hackers are willing to work even harder to break into educational institutions than other organizations. Failures in compliance can be extremely damaging, particularly with increased media attention.</p>\n<p>Following are a few international compliance regulations that keep students' data safe amidst the volatile criminal backdrop. </p>\n<ul>\n<li><strong>FERPA</strong>: Family Educational Rights and Privacy Act or FERPA protects the privacy of student education records. They can inspect, review their data, and if need be, they can also request amendment of their education record.</li>\n<li><strong>FOIA</strong>: The Freedom of Information Act dictates the US government agencies such as public schools, colleges, and universities to make available copies of all records requested by the student regardless of the form or format. </li>\n<li><strong>PPRA</strong>: The Protection of Pupil Rights Amendment protects the rights of minority students. Under this law, students are required to consent from parents before participating in any survey or evaluation that deals with personal data.</li>\n</ul>\n<h2 id=\"how-iam-improves-the-educational-experience-for-students\" style=\"position:relative;\"><a href=\"#how-iam-improves-the-educational-experience-for-students\" aria-label=\"how iam improves the educational experience for students permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>How IAM Improves the Educational Experience for Students</h2>\n<p>The optimal digital experience for education institutions is the need of the hour. Delivering top-notch experiences to students puts the pressure on <a href=\"https://www.loginradius.com/blog/2019/06/customer-identity-and-access-management/\">customer identity and access management</a> (CIAM) providers to provide a secure platform for their data. </p>\n<p>Here how identity management for education enhances the user experience of students and faculty.</p>\n<ul>\n<li><strong>Automated access</strong>: An ideal modern IAM solution offers automated account provisioning for students, and faculty to complement their access requests, and deprovisioning needs. It eliminates the risk of human error and allows students to enjoy timely access to every resource they need. </li>\n<li><strong>Self-service capabilities</strong>: It allows both students and faculty to manage their accounts. With an IAM solution, users need not approach the help desk to solve their issues. Instead, they can have them directly resolved on their own. Examples include resetting passwords or requesting for individual access. </li>\n<li><strong>User-friendly frontend</strong>: With features like the <a href=\"https://www.loginradius.com/blog/2019/05/what-is-single-sign-on/#:~:text=Single%20Sign%2DOn%20(SSO),trustworthy%20sites%20to%20verify%20users.&#x26;text=The%20LoginRadius%20Identity%20platform%20is,management%20solutions%20with%20SSO%20solutions.\">single sign-on</a>, all applications approved by the institute are placed under one portal. Students need only to remember a single login set, and they can enjoy access to multiple applications with a single click. </li>\n<li><strong>Protect data privacy</strong>: Schools, colleges, and universities have to deal with large volumes of personal data along with other sensitive financial and sensitive data. If hacked, hackers sell these data on the dark web. An identity management solution ensures security via various means—they leverage data regulations, compliances, and <a href=\"https://www.loginradius.com/authentication/\">authentication measures</a> to cut off the bad guys at the roots. </li>\n<li><strong>Manage alumni accounts</strong>: With identity management for education in place, schools and universities can easily continue to use their accounts and keep their student email addresses active even after graduating.</li>\n</ul>\n<h2 id=\"how-higher-education-sector-can-resolve-data-security-risk-by-using-the-loginradius-identity-management-platform\" style=\"position:relative;\"><a href=\"#how-higher-education-sector-can-resolve-data-security-risk-by-using-the-loginradius-identity-management-platform\" aria-label=\"how higher education sector can resolve data security risk by using the loginradius identity management platform permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>How Higher Education Sector Can Resolve Data Security Risk by Using the LoginRadius Identity Management Platform</h2>\n<p>Off late, there has been an amplified need for identity and access management in the education industry. LoginRadius, as a leading provider in its space, offers a number of a scalable, highly integrative set of tools to meet the growing requirement of the modern higher education sector. A few of the particular ones include:</p>\n<h3 id=\"new-age-onboarding\" style=\"position:relative;\"><a href=\"#new-age-onboarding\" aria-label=\"new age onboarding permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>New-age onboarding</h3>\n<p>The identity management platform allows institutes to create a central identity across all channels through single sign-on for students and faculty. It also offers modern and robust authentication methods such as <a href=\"https://www.loginradius.com/blog/2019/06/what-is-multi-factor-authentication/\">multi factor authentication (MFA)</a> with one-time passwords or security questions and more. </p>\n<p>LoginRadius allows smooth and seamless integration into systems through industry-approved standards like OpenID Connect, OAuth2, and SAML2.0. </p>\n<h3 id=\"a-clear-control-of-permissions\" style=\"position:relative;\"><a href=\"#a-clear-control-of-permissions\" aria-label=\"a clear control of permissions permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>A clear control of permissions</h3>\n<p>Define the roles and permissions on who can access what content and when with LoginRadius. Colleges and universities can delegate admins to teachers, lecturers, and staff and assign their respective roles.</p>\n<p>Besides, they can work with other faculties by adding users to their groups. Also, professors can divide their students into groups and assign permissions based on their projects.</p>\n<h3 id=\"robust-api-security\" style=\"position:relative;\"><a href=\"#robust-api-security\" aria-label=\"robust api security permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Robust API security</h3>\n<p>Strengthen security and protect resources with a <a href=\"https://www.loginradius.com/identity-api/\">secure interface (APIs)</a>. It detects suspicious behavior within the system, and when the need arises demands a second factor of authentication. </p>\n<p>Furthermore, it offers excellent user experience, and with SSO on the hook, it encourages users to choose a strong password for their accounts. As a cloud-based identity management platform, LoginRadius is always updated with the latest security mechanisms.</p>\n<h3 id=\"data-compliance-management\" style=\"position:relative;\"><a href=\"#data-compliance-management\" aria-label=\"data compliance management permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Data compliance management</h3>\n<p>The identity platform is compliant with all major international data regulation policies, including the <a href=\"https://www.loginradius.com/blog/identity/ccpa-vs-gdpr-the-compliance-war/\">EU's GDPR and California's CCPA</a>. To meet the high identity management of education requirements, it offers more transparency about accepted consents, secured access, and excellent user experience.</p>\n<h3 id=\"industry-specific-security-certifications\" style=\"position:relative;\"><a href=\"#industry-specific-security-certifications\" aria-label=\"industry specific security certifications permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Industry-specific security certifications</h3>\n<p>The identity management solution is compatible with <a href=\"https://www.loginradius.com/compliances/\">major security programs</a>. Major certifications include OpenID for end-user identity verification, PCI DSS PCI SSC administered standard for fee and salary transactions, ISO 27001:2013, 2015 for information security, AICPA SOC 2 (Type II) for system-level privacy control, and ISAE 3000 for the protection of non-financial information. </p>\n<p>Other certifications include ISAE 3000, NIST Cybersecurity Framework, CSA CCM Level 1, Level 2, CIS Critical Security Controls, US Privacy Shield Complaint, and ISO/IEC 27018:2019.</p>\n<h2 id=\"conclusion\" style=\"position:relative;\"><a href=\"#conclusion\" aria-label=\"conclusion permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Conclusion</h2>\n<p>Given this rapid upgrade in the classroom environment, experts are curious whether acceptance of online learning would continue to exist in the post-pandemic world, and whether such a move will affect the pressure of identity management on educational institutions.</p>\n<p>If it does (which sure, will), LoginRadius will certainly complement the complex, and unique CIAM needs for schools, colleges, and universities across the globe.</p>\n<p><a href=\"https://www.loginradius.com/book-a-demo/\"><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 30.307692307692307%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsTAAALEwEAmpwYAAABYElEQVQY0z2RO08CURCFN0hcWRZQHhYUKBHFBR+sUQQWefoAE4HCArXSWGhiZUGhsTHGEBsLf4AxdkQriZWWNtrY+HuOMwNaTO69k3PPfOdeZWS2BO9cGS4jD//8Ktyxgpx575kpQp20oE/nMGquQ4+uwBkvw5uswUcajfYOowBtKgsH1RBplQAJ+SI3fH2TwYkMeJBu5OCJF6XHYtvYEtRYCcF8E9HCNgbMGmxGGfbxJNSIJR4Kk+lU7niPjI3EjKiYkofYwykEEmtINQ5gVvewUN1FokJrhdaNHSzX9xG26gSShsKT1UhGCISQjJmKDbk33Kd3Ulwm5UThbAOh9JZUMLkpfQaTyCKmy0yl8Rv1yTiuFs1KnwcpoUWcXNzg8/sHj8+veHjq4r7zgvePL3S6b6Ljp1KYwE9x2Jjfgen+4rti+f8P4jjF5hFa13c4Pm/36qyN08tbHLau5DM56S/3nMSX+4NvoQAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"book-a-demo-loginradius\"\n        title=\"book-a-demo-loginradius\"\n        src=\"/static/c4fac6b24f15c7b7ba84deec1d1107ac/e5715/BD-Plexicon1-1024x310.png\"\n        srcset=\"/static/c4fac6b24f15c7b7ba84deec1d1107ac/a6d36/BD-Plexicon1-1024x310.png 650w,\n/static/c4fac6b24f15c7b7ba84deec1d1107ac/e5715/BD-Plexicon1-1024x310.png 768w,\n/static/c4fac6b24f15c7b7ba84deec1d1107ac/2bef9/BD-Plexicon1-1024x310.png 1024w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></a></p>\n<style class=\"grvsc-styles\">\n  .grvsc-container {\n    overflow: auto;\n    -webkit-overflow-scrolling: touch;\n    padding-top: 1rem;\n    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));\n    padding-bottom: 1rem;\n    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));\n    border-radius: 8px;\n    border-radius: var(--grvsc-border-radius, 8px);\n    font-feature-settings: normal;\n  }\n  \n  .grvsc-code {\n    display: inline-block;\n    min-width: 100%;\n  }\n  \n  .grvsc-line {\n    display: inline-block;\n    box-sizing: border-box;\n    width: 100%;\n    padding-left: 1.5rem;\n    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));\n    padding-right: 1.5rem;\n    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));\n  }\n  \n  .grvsc-line-highlighted {\n    background-color: var(--grvsc-line-highlighted-background-color, transparent);\n    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, transparent);\n  }\n  \n</style>","frontmatter":{"date":"July 08, 2020","updated_date":null,"description":"There is a notable increase in e-learning from the last couple of months. Many educational institutions are already facing security crises and trying their best to sustain.","title":"Why Identity Management for Education Sector has Become Crucial","tags":["public-sector"],"pinned":null,"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1.408450704225352,"src":"/static/fdb3d459ed0d6defae1a716f5c65a1ef/9a31d/Identity-Management-for-Education.jpg","srcSet":"/static/fdb3d459ed0d6defae1a716f5c65a1ef/f836f/Identity-Management-for-Education.jpg 200w,\n/static/fdb3d459ed0d6defae1a716f5c65a1ef/2244e/Identity-Management-for-Education.jpg 400w,\n/static/fdb3d459ed0d6defae1a716f5c65a1ef/9a31d/Identity-Management-for-Education.jpg 767w","sizes":"(max-width: 767px) 100vw, 767px"}}},"author":{"id":"Rakesh Soni","github":"oyesoni","avatar":"rakesh-soni.jpg"}}}},{"node":{"excerpt":"This post will cover a demo working setup of a service mesh architecture using Envoy using a demo application. In this service mesh…","fields":{"slug":"/engineering/service-mesh-with-envoy/"},"html":"<p>This post will cover a demo working setup of a service mesh architecture using Envoy using a demo application. In this service mesh architecture, we will be using Envoy proxy for both control and data plane. The setup is deployed in a Kubernetes cluster using Amazon EKS.</p>\n<h1 id=\"pre-requisites\" style=\"position:relative;\"><a href=\"#pre-requisites\" aria-label=\"pre requisites permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Pre-requisites</h1>\n<p>We will be deploying an echo-grpc test application provided by Google in their article related to gRPC load balancing and was used as a reference to test the service mesh setup with Envoy. The article covers setting up Envoy as an edge proxy only.\nThis is a simple gRPC application that exposes a unary method that takes a string in the content request field and responds with the content unaltered.\nRepo: <a href=\"https://github.com/GoogleCloudPlatform/grpc-gke-nlb-tutorial\">grpc-gke-nlb-tutorial</a></p>\n<ul>\n<li>Clone this repo.</li>\n<li>Go to the echo-grpc directory.</li>\n<li>Using the Dockerfile provided in the folder, we would have to build the image and push it to the Docker registry of choice. Since we are not using GCP, Docker Hub is used as the registry.</li>\n<li>Run docker login and login with your hub credentials.</li>\n<li>Build the image docker build -t echo-grpc .</li>\n<li>Tag the image docker tag echo-grpc <hub-username>/echo-grpc</li>\n<li>Push the image docker push <hub-username>/echo-grpc</li>\n<li>Create a separate folder to put all the YAML files.</li>\n<li>Create namespace in k8s:\n<code>kubectl create namespace envoy</code></li>\n<li>Install grpcurl tool which is similar to curl but for gRPC for testing:\n<code>go get github.com/fullstorydev/grpcurl</code></li>\n</ul>\n<h1 id=\"sidecar-deployment\" style=\"position:relative;\"><a href=\"#sidecar-deployment\" aria-label=\"sidecar deployment permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Sidecar Deployment</h1>\n<p>Configuration of envoy for the sidecar deployment:</p>\n<p><strong>envoy-echo.yaml:</strong></p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"0\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">apiVersion: v1</span>\n<span class=\"grvsc-line\">kind: ConfigMap</span>\n<span class=\"grvsc-line\">metadata:</span>\n<span class=\"grvsc-line\">  name: envoy-echo</span>\n<span class=\"grvsc-line\">data:</span>\n<span class=\"grvsc-line\">  envoy.yaml: |</span>\n<span class=\"grvsc-line\">    static_resources:</span>\n<span class=\"grvsc-line\">      listeners:</span>\n<span class=\"grvsc-line\">      - address:</span>\n<span class=\"grvsc-line\">          socket_address:</span>\n<span class=\"grvsc-line\">            address: 0.0.0.0</span>\n<span class=\"grvsc-line\">            port_value: 8786</span>\n<span class=\"grvsc-line\">        filter_chains:</span>\n<span class=\"grvsc-line\">        - filters:</span>\n<span class=\"grvsc-line\">          - name: envoy.http_connection_manager</span>\n<span class=\"grvsc-line\">            config:</span>\n<span class=\"grvsc-line\">              access_log:</span>\n<span class=\"grvsc-line\">              - name: envoy.file_access_log</span>\n<span class=\"grvsc-line\">                config:</span>\n<span class=\"grvsc-line\">                  path: &quot;/dev/stdout&quot;</span>\n<span class=\"grvsc-line\">              codec_type: AUTO</span>\n<span class=\"grvsc-line\">              stat_prefix: ingress_https</span>\n<span class=\"grvsc-line\">              route_config:</span>\n<span class=\"grvsc-line\">                name: local_route</span>\n<span class=\"grvsc-line\">                virtual_hosts:</span>\n<span class=\"grvsc-line\">                - name: https</span>\n<span class=\"grvsc-line\">                  domains:</span>\n<span class=\"grvsc-line\">                  - &quot;*&quot;</span>\n<span class=\"grvsc-line\">                  routes:</span>\n<span class=\"grvsc-line\">                  - match:</span>\n<span class=\"grvsc-line\">                      prefix: &quot;/api.Echo/&quot;</span>\n<span class=\"grvsc-line\">                    route:</span>\n<span class=\"grvsc-line\">                      cluster: echo-grpc</span>\n<span class=\"grvsc-line\">              http_filters:</span>\n<span class=\"grvsc-line\">              - name: envoy.health_check</span>\n<span class=\"grvsc-line\">                config:</span>\n<span class=\"grvsc-line\">                  pass_through_mode: false</span>\n<span class=\"grvsc-line\">                  headers:</span>\n<span class=\"grvsc-line\">                  - name: &quot;:path&quot;</span>\n<span class=\"grvsc-line\">                    exact_match: &quot;/healthz&quot;</span>\n<span class=\"grvsc-line\">                  - name: &quot;x-envoy-livenessprobe&quot;</span>\n<span class=\"grvsc-line\">                    exact_match: &quot;healthz&quot;</span>\n<span class=\"grvsc-line\">              - name: envoy.router</span>\n<span class=\"grvsc-line\">                config: {}</span>\n<span class=\"grvsc-line\">      clusters:</span>\n<span class=\"grvsc-line\">      - name: echo-grpc</span>\n<span class=\"grvsc-line\">        connect_timeout: 0.5s</span>\n<span class=\"grvsc-line\">        type: STATIC</span>\n<span class=\"grvsc-line\">        lb_policy: ROUND_ROBIN</span>\n<span class=\"grvsc-line\">        http2_protocol_options: {}</span>\n<span class=\"grvsc-line\">        load_assignment:</span>\n<span class=\"grvsc-line\">          cluster_name: echo-grpc</span>\n<span class=\"grvsc-line\">          endpoints:</span>\n<span class=\"grvsc-line\">          - lb_endpoints:</span>\n<span class=\"grvsc-line\">            - endpoint:</span>\n<span class=\"grvsc-line\">                address:</span>\n<span class=\"grvsc-line\">                  socket_address:</span>\n<span class=\"grvsc-line\">                    address: &quot;127.0.0.1&quot;</span>\n<span class=\"grvsc-line\">                    port_value: 8081</span>\n<span class=\"grvsc-line\">        health_checks:</span>\n<span class=\"grvsc-line\">          timeout: 1s</span>\n<span class=\"grvsc-line\">          interval: 10s</span>\n<span class=\"grvsc-line\">          unhealthy_threshold: 2</span>\n<span class=\"grvsc-line\">          healthy_threshold: 2</span>\n<span class=\"grvsc-line\">          grpc_health_check: {}</span>\n<span class=\"grvsc-line\">    admin:</span>\n<span class=\"grvsc-line\">      access_log_path: &quot;/dev/stdout&quot;</span>\n<span class=\"grvsc-line\">      address:</span>\n<span class=\"grvsc-line\">        socket_address:</span>\n<span class=\"grvsc-line\">          address: 127.0.0.1</span>\n<span class=\"grvsc-line\">          port_value: 8090</span></code></pre>\n<p>A couple things to note here. </p>\n<ul>\n<li>We are exposing sidecar on 8786 port on the container. </li>\n<li>Filter <strong>envoy.http<em>connection</em>manager</strong> handles the HTTP traffic. </li>\n<li><strong>route_config</strong> is used to define the routes for each domain to their respective clusters. Here we are keeping the domain as <code>*</code>, allowing all domains to pass-through.</li>\n<li>A cluster is envoy defines the services that will be called based on the route.</li>\n<li>In the cluster, the <strong>lb_policy</strong> defines the algorithm for load balancing, keeping as ROUND<em>ROBIN, with type STATIC because it is a sidecar and needs to communicate to only one pod always which leads to the reason for keeping the address in socket</em>address as localhost while port_value is what will be exposed by that particular service’s deployment.</li>\n</ul>\n<p>Run:\n<code>kubectl apply -f envoy-echo.yaml -n envoy</code></p>\n<p>Deployment of echo-grpc application with 3 replicas. The config contains two containers, one for application and another being the Envoy image.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"1\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">apiVersion: apps/v1</span>\n<span class=\"grvsc-line\">kind: Deployment</span>\n<span class=\"grvsc-line\">metadata:</span>\n<span class=\"grvsc-line\">  name: echo-grpc</span>\n<span class=\"grvsc-line\">spec:</span>\n<span class=\"grvsc-line\">  replicas: 3</span>\n<span class=\"grvsc-line\">  selector:</span>\n<span class=\"grvsc-line\">    matchLabels:</span>\n<span class=\"grvsc-line\">      app: echo-grpc</span>\n<span class=\"grvsc-line\">  template:</span>\n<span class=\"grvsc-line\">    metadata:</span>\n<span class=\"grvsc-line\">      labels:</span>\n<span class=\"grvsc-line\">        app: echo-grpc</span>\n<span class=\"grvsc-line\">    spec:</span>\n<span class=\"grvsc-line\">      containers:</span>\n<span class=\"grvsc-line\">      - name: echo-grpc</span>\n<span class=\"grvsc-line\">        image: &lt;hub-username&gt;/echo-grpc</span>\n<span class=\"grvsc-line\">        imagePullPolicy: Always</span>\n<span class=\"grvsc-line\">        resources: {}</span>\n<span class=\"grvsc-line\">        env:</span>\n<span class=\"grvsc-line\">        - name: &quot;PORT&quot;</span>\n<span class=\"grvsc-line\">          value: &quot;8081&quot;</span>\n<span class=\"grvsc-line\">        ports:</span>\n<span class=\"grvsc-line\">        - containerPort: 8081</span>\n<span class=\"grvsc-line\">        readinessProbe:</span>\n<span class=\"grvsc-line\">          exec:</span>\n<span class=\"grvsc-line\">            command: [&quot;/bin/grpc_health_probe&quot;, &quot;-addr=:8081&quot;]</span>\n<span class=\"grvsc-line\">          initialDelaySeconds: 1</span>\n<span class=\"grvsc-line\">        livenessProbe:</span>\n<span class=\"grvsc-line\">          exec:</span>\n<span class=\"grvsc-line\">            command: [&quot;/bin/grpc_health_probe&quot;, &quot;-addr=:8081&quot;]</span>\n<span class=\"grvsc-line\">          initialDelaySeconds: 1</span>\n<span class=\"grvsc-line\">      - name: envoy</span>\n<span class=\"grvsc-line\">        image: envoyproxy/envoy:v1.9.1</span>\n<span class=\"grvsc-line\">        resources: {}</span>\n<span class=\"grvsc-line\">        ports:</span>\n<span class=\"grvsc-line\">        - name: https</span>\n<span class=\"grvsc-line\">          containerPort: 443</span>\n<span class=\"grvsc-line\">        volumeMounts:</span>\n<span class=\"grvsc-line\">        - name: config</span>\n<span class=\"grvsc-line\">          mountPath: /etc/envoy</span>\n<span class=\"grvsc-line\">      volumes:</span>\n<span class=\"grvsc-line\">        - name: config</span>\n<span class=\"grvsc-line\">          configMap:</span>\n<span class=\"grvsc-line\">            name: envoy-echo</span></code></pre>\n<p>Here, echo-grpc is test application and envoy is being deployed in the same pod. Config volumes are mounted so that the envoy can read the configmaps.</p>\n<p>Run:\n<code>kubectl apply -f echo-deployment.yaml -n envoy</code></p>\n<h1 id=\"headless-service-configuration\" style=\"position:relative;\"><a href=\"#headless-service-configuration\" aria-label=\"headless service configuration permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Headless Service Configuration</h1>\n<p>We are using headless service for echo-grpc. Using service as headless will expose the Pods IP to the DNS server of kubernetes which will be used by Envoy to do service discovery for the pods.</p>\n<p><strong>echo-service.yaml</strong></p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"2\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">apiVersion: v1</span>\n<span class=\"grvsc-line\">kind: Service</span>\n<span class=\"grvsc-line\">metadata:</span>\n<span class=\"grvsc-line\">  name: echo-grpc</span>\n<span class=\"grvsc-line\">spec:</span>\n<span class=\"grvsc-line\">  type: ClusterIP</span>\n<span class=\"grvsc-line\">  clusterIP: None</span>\n<span class=\"grvsc-line\">  selector:</span>\n<span class=\"grvsc-line\">    app: echo-grpc</span>\n<span class=\"grvsc-line\">  ports:</span>\n<span class=\"grvsc-line\">  - name: http2-echo</span>\n<span class=\"grvsc-line\">    protocol: TCP</span>\n<span class=\"grvsc-line\">    port: 8786</span>\n<span class=\"grvsc-line\">  - name: http2-service</span>\n<span class=\"grvsc-line\">    protocol: TCP</span>\n<span class=\"grvsc-line\">    port: 8081</span></code></pre>\n<p>In the above config file, we are exposing two ports, one for envoy sidecar (this is the same port we mentioned in the config map of sidecar envoy) and one for the service itself.</p>\n<p>Run:\n<code>kubectl apply -f echo-service.yaml -n envoy</code></p>\n<h1 id=\"front-envoy-configuration\" style=\"position:relative;\"><a href=\"#front-envoy-configuration\" aria-label=\"front envoy configuration permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Front Envoy Configuration</h1>\n<p>Creating a service of type LoadBalancer so that client can access the backend service.</p>\n<p><strong>envoy-service.yaml:</strong></p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"3\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">apiVersion: v1</span>\n<span class=\"grvsc-line\">kind: Service</span>\n<span class=\"grvsc-line\">metadata:</span>\n<span class=\"grvsc-line\">  name: envoy</span>\n<span class=\"grvsc-line\">spec:</span>\n<span class=\"grvsc-line\">  type: LoadBalancer</span>\n<span class=\"grvsc-line\">  selector:</span>\n<span class=\"grvsc-line\">    app: envoy</span>\n<span class=\"grvsc-line\">  ports:</span>\n<span class=\"grvsc-line\">  - name: https</span>\n<span class=\"grvsc-line\">    protocol: TCP</span>\n<span class=\"grvsc-line\">    port: 443</span>\n<span class=\"grvsc-line\">    targetPort: 443</span></code></pre>\n<h3 id=\"creating-self-signed-certificates\" style=\"position:relative;\"><a href=\"#creating-self-signed-certificates\" aria-label=\"creating self signed certificates permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Creating self-signed certificates</h3>\n<p>Run:\n<code>kubectl apply -f envoy-service.yaml -n envoy</code></p>\n<p>Since we are deploying front envoy LoadBalancer on port 443, we have to create a self-signed certificate to make it terminate SSL/TLS connection.</p>\n<ul>\n<li>Get the external IP:\n<code>kubectl describe svc/envoy -n envoy</code></li>\n<li>Copy the LoadBalancer address in the EXTERNAL-IP section and do a nslookup and copy the IP address:\n<code>nslookup &#x3C;your load balancer aadess></code></li>\n<li>Create a self-signed cert and key:\n<code>openssl req -x509 -nodes -newkey rsa:2048 -days 365 -keyout privkey.pem -out cert.pem -subj \"/CN=&#x3C;ip-address>\"</code></li>\n<li>Create a Kubernetes TLS Secret called envoy-certs that contains the self-signed SSL/TLS certificate and key:\n<code>kubectl create secret tls envoy-certs --key privkey.pem --cert cert.pem --dry-run -o yaml</code></li>\n</ul>\n<h3 id=\"edge-envoy-configuration\" style=\"position:relative;\"><a href=\"#edge-envoy-configuration\" aria-label=\"edge envoy configuration permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Edge Envoy configuration</h3>\n<p>Configuration for the edge Envoy:</p>\n<p><strong>envoy-configmap.yaml</strong></p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"4\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">apiVersion: v1</span>\n<span class=\"grvsc-line\">kind: ConfigMap</span>\n<span class=\"grvsc-line\">metadata:</span>\n<span class=\"grvsc-line\">  name: envoy-conf</span>\n<span class=\"grvsc-line\">data:</span>\n<span class=\"grvsc-line\">  envoy.yaml: |</span>\n<span class=\"grvsc-line\">    static_resources:</span>\n<span class=\"grvsc-line\">      listeners:</span>\n<span class=\"grvsc-line\">      - address:</span>\n<span class=\"grvsc-line\">          socket_address:</span>\n<span class=\"grvsc-line\">            address: 0.0.0.0</span>\n<span class=\"grvsc-line\">            port_value: 443</span>\n<span class=\"grvsc-line\">        filter_chains:</span>\n<span class=\"grvsc-line\">        - filters:</span>\n<span class=\"grvsc-line\">          - name: envoy.http_connection_manager</span>\n<span class=\"grvsc-line\">            config:</span>\n<span class=\"grvsc-line\">              access_log:</span>\n<span class=\"grvsc-line\">              - name: envoy.file_access_log</span>\n<span class=\"grvsc-line\">                config:</span>\n<span class=\"grvsc-line\">                  path: &quot;/dev/stdout&quot;</span>\n<span class=\"grvsc-line\">              codec_type: AUTO</span>\n<span class=\"grvsc-line\">              stat_prefix: ingress_https</span>\n<span class=\"grvsc-line\">              route_config:</span>\n<span class=\"grvsc-line\">                name: local_route</span>\n<span class=\"grvsc-line\">                virtual_hosts:</span>\n<span class=\"grvsc-line\">                - name: https</span>\n<span class=\"grvsc-line\">                  domains:</span>\n<span class=\"grvsc-line\">                  - &quot;*&quot;</span>\n<span class=\"grvsc-line\">                  routes:</span>\n<span class=\"grvsc-line\">                  - match:</span>\n<span class=\"grvsc-line\">                      prefix: &quot;/api.Echo/&quot;</span>\n<span class=\"grvsc-line\">                    route:</span>\n<span class=\"grvsc-line\">                      cluster: echo-grpc</span>\n<span class=\"grvsc-line\">              http_filters:</span>\n<span class=\"grvsc-line\">              - name: envoy.health_check</span>\n<span class=\"grvsc-line\">                config:</span>\n<span class=\"grvsc-line\">                  pass_through_mode: false</span>\n<span class=\"grvsc-line\">                  headers:</span>\n<span class=\"grvsc-line\">                  - name: &quot;:path&quot;</span>\n<span class=\"grvsc-line\">                    exact_match: &quot;/healthz&quot;</span>\n<span class=\"grvsc-line\">                  - name: &quot;x-envoy-livenessprobe&quot;</span>\n<span class=\"grvsc-line\">                    exact_match: &quot;healthz&quot;</span>\n<span class=\"grvsc-line\">              - name: envoy.router</span>\n<span class=\"grvsc-line\">                config: {}</span>\n<span class=\"grvsc-line\">          tls_context:</span>\n<span class=\"grvsc-line\">            common_tls_context:</span>\n<span class=\"grvsc-line\">              tls_certificates:</span>\n<span class=\"grvsc-line\">              - certificate_chain:</span>\n<span class=\"grvsc-line\">                  filename: &quot;/etc/ssl/envoy/tls.crt&quot;</span>\n<span class=\"grvsc-line\">                private_key:</span>\n<span class=\"grvsc-line\">                  filename: &quot;/etc/ssl/envoy/tls.key&quot;</span>\n<span class=\"grvsc-line\">      clusters:</span>\n<span class=\"grvsc-line\">      - name: echo-grpc</span>\n<span class=\"grvsc-line\">        connect_timeout: 0.5s</span>\n<span class=\"grvsc-line\">        type: STRICT_DNS</span>\n<span class=\"grvsc-line\">        lb_policy: ROUND_ROBIN</span>\n<span class=\"grvsc-line\">        http2_protocol_options: {}</span>\n<span class=\"grvsc-line\">        load_assignment:</span>\n<span class=\"grvsc-line\">          cluster_name: echo-grpc</span>\n<span class=\"grvsc-line\">          endpoints:</span>\n<span class=\"grvsc-line\">          - lb_endpoints:</span>\n<span class=\"grvsc-line\">            - endpoint:</span>\n<span class=\"grvsc-line\">                address:</span>\n<span class=\"grvsc-line\">                  socket_address:</span>\n<span class=\"grvsc-line\">                    address: echo-grpc.envoy.svc.cluster.local</span>\n<span class=\"grvsc-line\">                    port_value: 8786</span>\n<span class=\"grvsc-line\">        health_checks:</span>\n<span class=\"grvsc-line\">          timeout: 1s</span>\n<span class=\"grvsc-line\">          interval: 10s</span>\n<span class=\"grvsc-line\">          unhealthy_threshold: 2</span>\n<span class=\"grvsc-line\">          healthy_threshold: 2</span>\n<span class=\"grvsc-line\">          grpc_health_check: {}</span>\n<span class=\"grvsc-line\">    admin:</span>\n<span class=\"grvsc-line\">      access_log_path: &quot;/dev/stdout&quot;</span>\n<span class=\"grvsc-line\">      address:</span>\n<span class=\"grvsc-line\">        socket_address:</span>\n<span class=\"grvsc-line\">          address: 127.0.0.1</span>\n<span class=\"grvsc-line\">          port_value: 8090</span></code></pre>\n<p>Since we will be offloading HTTPS, we are using port_value of 443. Most of the configurations are same as of sidecar envoy except for three things:</p>\n<ul>\n<li>A <strong>tls_context</strong> config is required to mention the tls certifications needed for authentication purposes.</li>\n<li>In clusters, the type has been to STATIC to STRICT_DNS which is a kind of service discovery mechanism making use of Headless service we deployed earlier.</li>\n<li>The socket_address’s address value has been changed to the FQDN of the service.</li>\n</ul>\n<p>Run:\n<code>kubectl apply -f envoy-configmap.yaml -n envoy</code></p>\n<h3 id=\"deployment-configuration\" style=\"position:relative;\"><a href=\"#deployment-configuration\" aria-label=\"deployment configuration permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Deployment Configuration</h3>\n<p><strong>envoy-deployment.yaml</strong></p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"5\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">apiVersion: apps/v1</span>\n<span class=\"grvsc-line\">kind: Deployment</span>\n<span class=\"grvsc-line\">metadata:</span>\n<span class=\"grvsc-line\">  name: envoy</span>\n<span class=\"grvsc-line\">spec:</span>\n<span class=\"grvsc-line\">  replicas: 2</span>\n<span class=\"grvsc-line\">  selector:</span>\n<span class=\"grvsc-line\">    matchLabels:</span>\n<span class=\"grvsc-line\">      app: envoy</span>\n<span class=\"grvsc-line\">  template:</span>\n<span class=\"grvsc-line\">    metadata:</span>\n<span class=\"grvsc-line\">      labels:</span>\n<span class=\"grvsc-line\">        app: envoy</span>\n<span class=\"grvsc-line\">    spec:</span>\n<span class=\"grvsc-line\">      containers:</span>\n<span class=\"grvsc-line\">      - name: envoy</span>\n<span class=\"grvsc-line\">        image: envoyproxy/envoy:v1.9.1</span>\n<span class=\"grvsc-line\">        resources: {}</span>\n<span class=\"grvsc-line\">        ports:</span>\n<span class=\"grvsc-line\">        - name: https</span>\n<span class=\"grvsc-line\">          containerPort: 443</span>\n<span class=\"grvsc-line\">        volumeMounts:</span>\n<span class=\"grvsc-line\">        - name: config</span>\n<span class=\"grvsc-line\">          mountPath: /etc/envoy</span>\n<span class=\"grvsc-line\">        - name: certs</span>\n<span class=\"grvsc-line\">          mountPath: /etc/ssl/envoy</span>\n<span class=\"grvsc-line\">        readinessProbe:</span>\n<span class=\"grvsc-line\">          httpGet:</span>\n<span class=\"grvsc-line\">            scheme: HTTPS</span>\n<span class=\"grvsc-line\">            path: /healthz</span>\n<span class=\"grvsc-line\">            httpHeaders:</span>\n<span class=\"grvsc-line\">            - name: x-envoy-livenessprobe</span>\n<span class=\"grvsc-line\">              value: healthz</span>\n<span class=\"grvsc-line\">            port: 443</span>\n<span class=\"grvsc-line\">          initialDelaySeconds: 3</span>\n<span class=\"grvsc-line\">        livenessProbe:</span>\n<span class=\"grvsc-line\">          httpGet:</span>\n<span class=\"grvsc-line\">            scheme: HTTPS</span>\n<span class=\"grvsc-line\">            path: /healthz</span>\n<span class=\"grvsc-line\">            httpHeaders:</span>\n<span class=\"grvsc-line\">            - name: x-envoy-livenessprobe</span>\n<span class=\"grvsc-line\">              value: healthz</span>\n<span class=\"grvsc-line\">            port: 443</span>\n<span class=\"grvsc-line\">          initialDelaySeconds: 10</span>\n<span class=\"grvsc-line\">      volumes:</span>\n<span class=\"grvsc-line\">      - name: config</span>\n<span class=\"grvsc-line\">        configMap:</span>\n<span class=\"grvsc-line\">          name: envoy-conf</span>\n<span class=\"grvsc-line\">      - name: certs</span>\n<span class=\"grvsc-line\">        secret:</span>\n<span class=\"grvsc-line\">          secretName: envoy-certs</span></code></pre>\n<p>Run:\n<code>kubectl apply -f envoy-deployment.yaml -n envoy</code></p>\n<h1 id=\"testing\" style=\"position:relative;\"><a href=\"#testing\" aria-label=\"testing permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Testing</h1>\n<p>Proto file for the echo-grpc service:</p>\n<p><strong>ccho.proto:</strong></p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"6\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">syntax = &quot;proto3&quot;;</span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\">package api;</span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\">service Echo {</span>\n<span class=\"grvsc-line\">  rpc Echo (EchoRequest) returns (EchoResponse) {}</span>\n<span class=\"grvsc-line\">}</span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\">message EchoRequest {</span>\n<span class=\"grvsc-line\">  string content = 1;</span>\n<span class=\"grvsc-line\">}</span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\">message EchoResponse {</span>\n<span class=\"grvsc-line\">  string content = 1;</span>\n<span class=\"grvsc-line\">}</span></code></pre>\n<p>Run the following command to call the server:\n<code>grpcurl -d '{\"content\": \"echo\"}' -proto echo.proto -insecure -v &#x3C;load_balancer_or_external_ip>:443 api.Echo/Echo</code></p>\n<p>The output will be similar to something like this:</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"7\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">Resolved method descriptor:</span>\n<span class=\"grvsc-line\">rpc Echo ( .api.EchoRequest ) returns ( .api.EchoResponse );</span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\">Request metadata to send:</span>\n<span class=\"grvsc-line\">(empty)</span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\">Response headers received:</span>\n<span class=\"grvsc-line\">content-type: application/grpc</span>\n<span class=\"grvsc-line\">date: Wed, 27 Feb 2019 04:40:19 GMT</span>\n<span class=\"grvsc-line\">hostname: echo-grpc-5c4f59c578-wcsvr</span>\n<span class=\"grvsc-line\">server: envoy</span>\n<span class=\"grvsc-line\">x-envoy-upstream-service-time: 0</span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\">Response contents:</span>\n<span class=\"grvsc-line\">{</span>\n<span class=\"grvsc-line\">  &quot;content&quot;: &quot;echo&quot;</span>\n<span class=\"grvsc-line\">}</span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\">Response trailers received:</span>\n<span class=\"grvsc-line\">(empty)</span>\n<span class=\"grvsc-line\">Sent 1 request and received 1 response</span></code></pre>\n<p>Run the above command multiple times and check the value of the hostname field every time which will contain the pod name of one of the 3 pods deployed. </p>\n<h1 id=\"references\" style=\"position:relative;\"><a href=\"#references\" aria-label=\"references permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>References</h1>\n<ul>\n<li>Article: <a href=\"https://cloud.google.com/solutions/exposing-grpc-services-on-gke-using-envoy-proxy\">Using Envoy Proxy to load-balance gRPC services on GKE</a></li>\n<li><a href=\"https://kubernetes.io/docs/concepts/services-networking/service/#headless-services\">Headless service</a></li>\n</ul>\n<style class=\"grvsc-styles\">\n  .grvsc-container {\n    overflow: auto;\n    -webkit-overflow-scrolling: touch;\n    padding-top: 1rem;\n    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));\n    padding-bottom: 1rem;\n    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));\n    border-radius: 8px;\n    border-radius: var(--grvsc-border-radius, 8px);\n    font-feature-settings: normal;\n  }\n  \n  .grvsc-code {\n    display: inline-block;\n    min-width: 100%;\n  }\n  \n  .grvsc-line {\n    display: inline-block;\n    box-sizing: border-box;\n    width: 100%;\n    padding-left: 1.5rem;\n    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));\n    padding-right: 1.5rem;\n    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));\n  }\n  \n  .grvsc-line-highlighted {\n    background-color: var(--grvsc-line-highlighted-background-color, transparent);\n    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, transparent);\n  }\n  \n  .dark-default-dark {\n    background-color: #1E1E1E;\n    color: #D4D4D4;\n  }\n</style>","frontmatter":{"date":"July 06, 2020","updated_date":null,"description":null,"title":"Service Mesh with Envoy","tags":["Service Mesh","Envoy","Microservices"],"pinned":null,"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1.834862385321101,"src":"/static/f5fbebaefd091eb3f33c225fa71b0814/14b42/front-image.jpg","srcSet":"/static/f5fbebaefd091eb3f33c225fa71b0814/f836f/front-image.jpg 200w,\n/static/f5fbebaefd091eb3f33c225fa71b0814/2244e/front-image.jpg 400w,\n/static/f5fbebaefd091eb3f33c225fa71b0814/14b42/front-image.jpg 800w,\n/static/f5fbebaefd091eb3f33c225fa71b0814/47498/front-image.jpg 1200w,\n/static/f5fbebaefd091eb3f33c225fa71b0814/0e329/front-image.jpg 1600w,\n/static/f5fbebaefd091eb3f33c225fa71b0814/6ed45/front-image.jpg 2100w","sizes":"(max-width: 800px) 100vw, 800px"}}},"author":{"id":"Piyush Kumar","github":"kpiyush17","avatar":null}}}}]},"markdownRemark":{"excerpt":"Identity is evolving, and developers are at the forefront of this transformation. Every day brings a new learning—adapting to new standards…","fields":{"slug":"/identity/developer-first-identity-provider-loginradius/"},"html":"<p>Identity is evolving, and developers are at the forefront of this transformation. Every day brings a new learning—adapting to new standards and refining approaches to building secure, seamless experiences.</p>\n<p>We’re here to support developers on that journey. We know how important simplicity, efficiency, and well-structured documentation are when working with identity and access management solutions. That’s why we’ve redesigned the <a href=\"https://www.loginradius.com/\">LoginRadius website</a>—to be faster, more intuitive, and developer-first in every way.</p>\n<p>The goal? Having them spend less time searching and more time building.</p>\n<h2 id=\"whats-new-and-improved-on-the-loginradius-website\" style=\"position:relative;\"><a href=\"#whats-new-and-improved-on-the-loginradius-website\" aria-label=\"whats new and improved on the loginradius website permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>What’s New and Improved on the LoginRadius Website?</h2>\n<p>LoginRadius’ vision is to give developers a product that simplifies identity management so they can focus on building, deploying, and scaling their applications. To enhance this experience, we’ve spent the last few months redesigning our interface— making navigation more intuitive and reassuring that essential resources are easily accessible.</p>\n<p>Here’s a closer look at what’s new and why it’s important:</p>\n<h3 id=\"a-developer-friendly-dark-theme\" style=\"position:relative;\"><a href=\"#a-developer-friendly-dark-theme\" aria-label=\"a developer friendly dark theme permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>A Developer-Friendly Dark Theme</h3>\n<p><img src=\"/f46881583c7518a93bb24e94c32320de/a-developer-friendly-dark-theme.webp\" alt=\"This image shows how LoginRadius offers several authentication methods like traditional login, social login, passwordless login, passkeys and more in a dark mode.\">    </p>\n<p>Developers spend long hours working in dark-themed IDEs and terminals, so we’ve designed the LoginRadius experience to be developer-friendly and align with that preference.</p>\n<p>The new dark mode reduces eye strain, enhances readability, and provides a seamless transition between a coding environment and our platform. Our new design features a clean, modern aesthetic with a consistent color scheme and Barlow typography, ensuring better readability. High-quality graphics and icons are thoughtfully placed to enhance the content without adding visual clutter.</p>\n<p>So, whether you’re navigating our API docs or configuring authentication into your system, our improved interface will make those extended development hours more comfortable and efficient.</p>\n<h3 id=\"clear-categorization-for-loginradius-capabilities\" style=\"position:relative;\"><a href=\"#clear-categorization-for-loginradius-capabilities\" aria-label=\"clear categorization for loginradius capabilities permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Clear Categorization for LoginRadius Capabilities</h3>\n<p><img src=\"/e5358b82be414940f3fb146013845933/capabilities.webp\" alt=\"This image shows a breakdown of all the LoginRadius CIAM capabilities, including authentication, security, UX, scalability and multi-brand management.\"></p>\n<p>We’ve restructured our website to provide a straightforward breakdown of our customer identity and access management platform capabilities, helping you quickly find what you need:</p>\n<ul>\n<li>Authentication: Easily understand <a href=\"https://www.loginradius.com/blog/identity/authentication-option-for-your-product/\">how to choose the right login method</a>, from traditional passwords and OTPs to social login, federated SSO, and passkeys with few lines of code.</li>\n<li>Security: Implement no-code security features like bot detection, IP throttling, breached password alerts, DDoS protection, and adaptive MFA to safeguard user accounts.</li>\n<li>User Experience: Leverage AI builder, hosted pages, and drag-and-drop workflows to create smooth, branded sign-up and login experiences.</li>\n<li>High Performance &#x26; Scalability: Confidently scale with sub-100ms API response times, 100% uptime, 240K+ RPS, and 28+ global data center regions.</li>\n<li>Multi-Brand Management: Efficiently manage multiple identity apps, choosing isolated or shared data stores based on your brand’s unique needs.</li>\n</ul>\n<p>This structured layout ensures you can quickly understand each capability and how it integrates into your identity ecosystem.</p>\n<h3 id=\"developer-first-navigation\" style=\"position:relative;\"><a href=\"#developer-first-navigation\" aria-label=\"developer first navigation permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Developer-First Navigation</h3>\n<p><img src=\"/a8c155c2b6faf3d5f4b4de4e2b14d763/developers-menu.webp\" alt=\"This image shows the LoginRadius menu bar, highlighting the developer dropdown.\">   </p>\n<p>We’ve been analyzing developer workflows to identify how you access key resources. That’s why we redesigned our navigation with one goal in mind: to reduce clicks and make essential resources readily available.</p>\n<p>The new LoginRadius structure puts APIs, SDKs, and integration guides right at the menu bar under the Developers dropdown so you can get started faster. Our Products, Solutions, and Customer Services are also clearly categorized, helping development teams quickly find the right tools and make informed decisions.</p>\n<h3 id=\"quick-understanding-of-integration-benefits\" style=\"position:relative;\"><a href=\"#quick-understanding-of-integration-benefits\" aria-label=\"quick understanding of integration benefits permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Quick Understanding of Integration Benefits</h3>\n<p><img src=\"/b2f9a964a2da0ea83e2f8596b833bba7/we-support-your-tech-stack.webp\" alt=\"This image shows a list of popular programming languages and frameworks offered by LoginRadius.\"></p>\n<p>Developers now have a clear view of the tech stack available with LoginRadius, designed to support diverse business needs.</p>\n<p>Our platform offers pre-built SDKs for Node.js, Python, Java, and more, making CIAM integration seamless across popular programming languages and frameworks.</p>\n<h2 id=\"over-to-you-now\" style=\"position:relative;\"><a href=\"#over-to-you-now\" aria-label=\"over to you now permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Over to You Now!</h2>\n<p>Check out our <a href=\"https://www.loginradius.com/\">revamped LoginRadius website</a> and see how the improved experience makes it easier to build, scale, and secure your applications.</p>\n<p>Do not forget to explore the improved navigation and API documentation, and get started with our free trial today. We’re excited to see what you’ll build with LoginRadius!</p>\n<style class=\"grvsc-styles\">\n  .grvsc-container {\n    overflow: auto;\n    -webkit-overflow-scrolling: touch;\n    padding-top: 1rem;\n    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));\n    padding-bottom: 1rem;\n    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));\n    border-radius: 8px;\n    border-radius: var(--grvsc-border-radius, 8px);\n    font-feature-settings: normal;\n  }\n  \n  .grvsc-code {\n    display: inline-block;\n    min-width: 100%;\n  }\n  \n  .grvsc-line {\n    display: inline-block;\n    box-sizing: border-box;\n    width: 100%;\n    padding-left: 1.5rem;\n    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));\n    padding-right: 1.5rem;\n    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));\n  }\n  \n  .grvsc-line-highlighted {\n    background-color: var(--grvsc-line-highlighted-background-color, transparent);\n    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, transparent);\n  }\n  \n</style>","frontmatter":{"date":"February 21, 2025","updated_date":null,"description":"LoginRadius’ vision is to give developers a product that simplifies identity management so they can focus on building, deploying, and scaling their applications. To enhance this experience, we’ve redesigned our website interface, making navigation more intuitive and reassuring that essential resources are easily accessible.","title":"Revamped & Ready: Introducing the New Developer-First LoginRadius Website","tags":["Developer tools","API","Identity Management","User Authentication"],"pinned":true,"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1.7857142857142858,"src":"/static/80b4e4fbe176a10a327d273504607f32/58556/hero-section.webp","srcSet":"/static/80b4e4fbe176a10a327d273504607f32/61e93/hero-section.webp 200w,\n/static/80b4e4fbe176a10a327d273504607f32/1f5c5/hero-section.webp 400w,\n/static/80b4e4fbe176a10a327d273504607f32/58556/hero-section.webp 800w,\n/static/80b4e4fbe176a10a327d273504607f32/99238/hero-section.webp 1200w,\n/static/80b4e4fbe176a10a327d273504607f32/7c22d/hero-section.webp 1600w,\n/static/80b4e4fbe176a10a327d273504607f32/1258b/hero-section.webp 2732w","sizes":"(max-width: 800px) 100vw, 800px"}}},"author":{"id":"Rakesh Soni","github":"oyesoni","avatar":"rakesh-soni.jpg"}}}},"pageContext":{"limit":6,"skip":756,"currentPage":127,"type":"///","numPages":161,"pinned":"ee8a4479-3471-53b1-bf62-d0d8dc3faaeb"}},"staticQueryHashes":["1171199041","1384082988","2100481360","23180105","528864852"]}