{"id":554,"date":"2025-06-03T16:37:33","date_gmt":"2025-06-03T16:37:33","guid":{"rendered":"https:\/\/blog.ngocha.biz\/?p=554"},"modified":"2025-06-03T16:37:33","modified_gmt":"2025-06-03T16:37:33","slug":"authenticate-azure-cli","status":"publish","type":"post","link":"https:\/\/blog.ngocha.biz\/?p=554","title":{"rendered":"Authenticate Azure CLI Using Service Principal (Tutorial)"},"content":{"rendered":"<p>In this tutorial, you&#8217;ll learn how to authenticate with Azure using a service principal (one of the common authentication methods).<\/p>\n<p>By default, the <a href=\"https:\/\/devopscube.com\/setting-azure-cli-ubuntu-linux\/\" rel=\"noreferrer\">Azure CLI<\/a> uses an interactive login method. <\/p>\n<p>When you run <code>az login<\/code> in the CLI, it opens an interactive web page where you enter your email and password to sign in. While this approach is simple and straightforward, it&#8217;s not ideal for <a href=\"https:\/\/devopscube.com\/learning-ci-cd-tools\/\" rel=\"noreferrer\">CI\/CD workflows<\/a> or secure automation.<\/p>\n<p>For better security and automation, it&#8217;s recommended to use alternative methods like Azure App registration with a client secret or a certificate. These options offer more control and are better suited for non-interactive, secure environments.<\/p>\n<h2 id=\"setup-the-azure-app-registration-and-service-principal\">Setup the Azure App Registration and Service Principal<\/h2>\n<p>The steps below will guide you through creating an app registration on the Azure Entra ID and configuring the service principal to access the services.<\/p>\n<h3 id=\"step-1-create-an-azure-app-registration\">Step 1: Create an Azure App Registration<\/h3>\n<p>Open Microsoft Entra ID from the main console dashboard.<\/p>\n<p>Azure Entra ID is the identity and access management service of the Azure cloud.<\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-34.png\" class=\"kg-image\" alt=\"selecting the azure entra id from the search box\" loading=\"lazy\" width=\"778\" height=\"535\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-34.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-34.png 778w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>The Entra ID dashboard displays all IAM and Azure-related services. From the left-hand panel, select <strong>App Registrations<\/strong>.<\/p>\n<p>Azure App Registration is essentially the process of assigning an identity to your application. <\/p>\n<p>For instance, if your app needs to interact with specific Azure services, it first needs a recognizable identity in Azure. This allows Azure to authenticate and authorize the app properly.<\/p>\n<p>During the registration process, Azure generates a unique Application (client) ID, which is a key component used for authentication and access control.<\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-1-5.png\" class=\"kg-image\" alt=\"creating the new registration from the app registrations\" loading=\"lazy\" width=\"1162\" height=\"686\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-1-5.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-1-5.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-1-5.png 1162w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>Give a name for the App Registration and select the account type from the list of supported account types.<\/p>\n<p>Account types will define who is allowed to access your application. <\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-2-4.png\" class=\"kg-image\" alt=\"filing the application registration with the required informations\" loading=\"lazy\" width=\"1095\" height=\"834\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-2-4.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-2-4.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-2-4.png 1095w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>I have chosen the <code>Single tenant<\/code> type because I want the application to be used only by users in the specific Entra ID tenant.<\/p>\n<p>Once the registration is completed, you can see the <code>Application (client) ID<\/code> and the <code>Directory (tenant) ID<\/code>.<\/p>\n<p>Note them down for the upcoming configuration. <\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-3-4.png\" class=\"kg-image\" alt=\"getting the application id and the directory id after creating the app registration\" loading=\"lazy\" width=\"1188\" height=\"568\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-3-4.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-3-4.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-3-4.png 1188w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>Next, we need to create client credentials for secure authentication.<\/p>\n<blockquote><p>Note: When you create the App Registration, a Service Principal also be associated with that, you can verify on the <code>Enterprise application<\/code> section or if you already have CLI access, you can use the following comand `az ad sp list &#8211;display-name &lt;APP_REGISTRATION_NAME&gt;<\/p><\/blockquote>\n<h3 id=\"step-2-create-client-credentials\">Step 2: Create Client Credentials <\/h3>\n<p>Client credentials are required to authenticate App Registration and Microsoft Entra ID.<\/p>\n<p>Azure supports various credential options for App Registration, such as certificates, secret tokens, and federated credentials.<\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-12-7.png\" class=\"kg-image\" alt=\"adding credentials for the app registration for the authentication\" loading=\"lazy\" width=\"1157\" height=\"522\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-12-7.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-12-7.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-12-7.png 1157w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>For this, I am choosing the <code>Client secret<\/code> option.<\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-13-6.png\" class=\"kg-image\" alt=\"selecting the secret method for the authentication\" loading=\"lazy\" width=\"1205\" height=\"723\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-13-6.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-13-6.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-13-6.png 1205w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<blockquote><p>Note: <code>Certificates<\/code> is the more secure method than the <code>Secrets<\/code> but you need to locally generate the certificates and import them for the configuration.<\/p><\/blockquote>\n<p>On the next page, you need to give a description of the secret and the expiration date for the secret token. <\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-14-5.png\" class=\"kg-image\" alt=\"giving description for the app registration secret with the expiry date\" loading=\"lazy\" width=\"1447\" height=\"680\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-14-5.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-14-5.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-14-5.png 1447w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>Once the client secret is created, you can see that in the <code>Certificates &amp; secrets<\/code> dashboard.<\/p>\n<p>Note down the secret value for the authentication, first time only you can see the secret value so save it somewhere safe.<\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-15-4.png\" class=\"kg-image\" alt=\"copying the secret value for the authentication from the cli\" loading=\"lazy\" width=\"1216\" height=\"710\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-15-4.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-15-4.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-15-4.png 1216w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<h3 id=\"step-3-add-permission-to-the-app-registration\">Step 3: Add Permission to the App Registration <\/h3>\n<p>We need to assing a role with required permission to the Service Principal associated with the App Registration on the specific Azure subscription.<\/p>\n<p>Navigate to the Azure subscription console.<\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-4-4.png\" class=\"kg-image\" alt=\"selecting the subscriptions to add permission to the azure app registrations\" loading=\"lazy\" width=\"846\" height=\"528\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-4-4.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-4-4.png 846w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>Select the specific subscription if you have multiple subscriptions.<\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-5-4.png\" class=\"kg-image\" alt=\"selecting the appropriate subscription from the list\" loading=\"lazy\" width=\"1041\" height=\"524\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-5-4.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-5-4.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-5-4.png 1041w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>Open the <code>Access control (IAM)<\/code> from the left side navigation panel.<\/p>\n<p>Click the <code>+ Add<\/code> button at the top of the pane, and from the dropdown menu, select the <code>Add role assignment<\/code>.<\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-6-4.png\" class=\"kg-image\" alt=\"adding the role assignment for the app registration\" loading=\"lazy\" width=\"1132\" height=\"610\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-6-4.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-6-4.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-6-4.png 1132w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>On the next page, under the <code>Role<\/code> tab, we can see the list of job function roles and privileged administrative roles.<\/p>\n<p>From the <code>Privileged administratior roles<\/code> , selecting the <code>Contributor<\/code> role and click <code>next<\/code><\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-7-3.png\" class=\"kg-image\" alt=\"selecting the contributor role for the app registration\" loading=\"lazy\" width=\"1327\" height=\"921\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-7-3.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-7-3.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-7-3.png 1327w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>On the next page, we need to decide whom should we need to assign this role. (user, group, or service principal)<\/p>\n<p>In our case, it is the Service Principal.<\/p>\n<p>When we create a single tenant App Registration, the Service Principal will also be created and the name will be the same as the App Registration.<\/p>\n<p>On the <code>Members<\/code> section, click <code>+ Select members<\/code> <\/p>\n<p>On the search menu, search with the App Registration name, and the search result will display the Service Principal associated with the App Registration.  <\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-8-3.png\" class=\"kg-image\" alt=\"selecting the app registration from under the members section\" loading=\"lazy\" width=\"1220\" height=\"723\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-8-3.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-8-3.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-8-3.png 1220w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>In the final stage which is <code>Review + assign<\/code>, you can see the Role, Scope, and the Service Principal.<\/p>\n<p>Once the review is completed, click the assign button.<\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-9-6.png\" class=\"kg-image\" alt=\"assigining the role to the app registration to get the defined permissions\" loading=\"lazy\" width=\"1081\" height=\"548\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-9-6.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-9-6.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-9-6.png 1081w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>Now, we have successfully assigned the <code>Contributor<\/code> role to the Service Principal associated with the App Registration.<\/p>\n<h3 id=\"step-4-authenticate-azure-cli-with-the-service-principal\">Step 4: Authenticate Azure CLI with the Service Principal<\/h3>\n<p>Install the Azure CLI on the local workstation.<\/p>\n<p>Refer to the <a href=\"https:\/\/learn.microsoft.com\/en-us\/cli\/azure\/install-azure-cli?ref=devopscube.com\" rel=\"noreferrer\">official documentation<\/a> for the installation instructions.<\/p>\n<p>Once the installation is complete,  use the following command to authenticate the Azure CLI with the Service Principal, so that we can access Azure resources from the local workstation.<\/p>\n<pre><code class=\"language-bash\">az login --service-principal -u &lt;Application (client) ID&gt; -p &lt;Client Secret Value&gt; --tenant &lt;Directory (tenant) ID&gt;<\/code><\/pre>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-17-4.png\" class=\"kg-image\" alt=\"logging in with the app registration credentials from the local cli\" loading=\"lazy\" width=\"1348\" height=\"628\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/03\/image-17-4.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2025\/03\/image-17-4.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/03\/image-17-4.png 1348w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<h2 id=\"conclusion\">Conclusion<\/h2>\n<p>To sum up, this blog walked through creating an Azure App Registration, setting up client credentials (Secret instead of email ID and password), and assigning a role to the Service Principal for CLI access.<\/p>\n<p>With this setup, we&#8217;ve enabled a non-interactive login method that&#8217;s perfect for automation tasks like scripting and CI\/CD. <\/p>\n<p>This means we can now create and manage Azure resources seamlessly, without ever needing to use the portal.<\/p>\n<p>If you face any errors or need any clarification, do drop a comment! We will be happy to share our insights.<\/p>\n<hr>\n<p><strong>Ngu\u1ed3n:<\/strong> <a href=\"https:\/\/devopscube.com\/authenticate-azure-cli\/\" target=\"_blank\" rel=\"noopener noreferrer\">Authenticate Azure CLI Using Service Principal (Tutorial) \u2014 DevOpsCube<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Source: https:\/\/devopscube.com\/authenticate-azure-cli\/<\/p>\n","protected":false},"author":1,"featured_media":555,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-554","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devops"],"_links":{"self":[{"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=\/wp\/v2\/posts\/554","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=554"}],"version-history":[{"count":0,"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=\/wp\/v2\/posts\/554\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=\/wp\/v2\/media\/555"}],"wp:attachment":[{"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=554"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=554"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=554"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}