{"id":1830,"date":"2019-06-18T16:09:06","date_gmt":"2019-06-18T10:39:06","guid":{"rendered":"http:\/\/blog.tenthplanet.in\/?p=1830"},"modified":"2026-07-03T14:47:04","modified_gmt":"2026-07-03T09:17:04","slug":"configuring-pentaho-with-integrated-windows-authentication","status":"publish","type":"post","link":"https:\/\/tenthplanet.in\/blogs\/configuring-pentaho-with-integrated-windows-authentication\/","title":{"rendered":"Secure authentication to Pentaho+ with Integrated Windows authentication"},"content":{"rendered":"<p>Pentaho+ can be configured to use many mechanisms for authentication and authorization, such as<br \/>\nthe lightweight directory access protocol (LDAP) or database-based authentication (JDBC<br \/>\nauthentication) from Microsoft Active Directory. This document aims to work through the steps needed to set up Pentaho+ to authenticate using Integrated Windows Authentication (IWA) with a pre-configured Microsoft (MS) Active Directory.<\/p>\n<p><strong>Prerequisites:<\/strong><\/p>\n<p><strong>Configure active directory:<\/strong><\/p>\n<p>In this document we assume that the MSAD(Microsoft Active Directory) has been already setup.<br \/>\nBefore we go into the configuration part we must understand few terminologies that are available in MSAD like 1)DN 2)DC 3)OU 4)CN<br \/>\n1) DN:- Distinguished Name, each entry has a unique identifier.<br \/>\n2) DC:- Domain Component, is the DN of the parent entry.<br \/>\n3) OU:- Organizational Unit.<br \/>\n4) CN:- Common Name, this is can be a user group name.<br \/>\nTo configure the MSAD right click on the Active Directory server and select NEW and create a OU. example OU=BIUSERS, simillarly create another OU. example OU=BIROLES.<\/p>\n<ul>\n<li>In the next step select OU=BIROLES and right click on it, then select the NEW and create a group. Note:- Here select the group as Domain local.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1832\" src=\"https:\/\/tenthplanet.in\/blogs\/wp-content\/uploads\/sites\/21\/2019\/06\/create_group-300x171.png\" alt=\"\" width=\"453\" height=\"258\" title=\"\" srcset=\"https:\/\/tenthplanet.in\/blogs\/wp-content\/uploads\/sites\/21\/2019\/06\/create_group-300x171.png 300w, https:\/\/tenthplanet.in\/blogs\/wp-content\/uploads\/sites\/21\/2019\/06\/create_group-768x437.png 768w, https:\/\/tenthplanet.in\/blogs\/wp-content\/uploads\/sites\/21\/2019\/06\/create_group.png 1020w\" sizes=\"auto, (max-width: 453px) 100vw, 453px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1833\" src=\"https:\/\/tenthplanet.in\/blogs\/wp-content\/uploads\/sites\/21\/2019\/06\/group-300x256.png\" alt=\"\" width=\"450\" height=\"384\" title=\"\" srcset=\"https:\/\/tenthplanet.in\/blogs\/wp-content\/uploads\/sites\/21\/2019\/06\/group-300x256.png 300w, https:\/\/tenthplanet.in\/blogs\/wp-content\/uploads\/sites\/21\/2019\/06\/group.png 535w\" sizes=\"auto, (max-width: 450px) 100vw, 450px\" \/><\/p>\n<ul>\n<li>In the next step select OU=BIUSERS and right click on it, then select the NEW and create a USER (this will be the admin user in my case). Note:- Dont forget to select the password option as PASSWORD NEVER EXPIRES.<\/li>\n<li>After the user is created right click on OU=BIUSERS and select Deligate Control option, click NEXT and select ADD to add a user.<\/li>\n<li>In the dialogbox under ENTER THE OBJECT NAME type the USER created and add that user and click OK, in the next stage click NEXT .<\/li>\n<li>Select Create a custom task to deligate check-box and click NEXT and then select This Folder check box and again click NEXT,<\/li>\n<li>select Full control click NEXT and click Finish.<\/li>\n<li><strong>Pentaho Plus Integration with Microsoft Active Directory:-<\/strong><br \/>\nLogin into the Pentaho+ User Console (PUC) and click on the HOME toggle button, and select the Administration. Then under the Administration select the Authentication option.<\/li>\n<li>Provide the MSAD server login details and click on the Test Server Connection.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1834\" src=\"https:\/\/tenthplanet.in\/blogs\/wp-content\/uploads\/sites\/21\/2019\/06\/auth_check_1-300x276.png\" alt=\"\" width=\"399\" height=\"367\" title=\"\" srcset=\"https:\/\/tenthplanet.in\/blogs\/wp-content\/uploads\/sites\/21\/2019\/06\/auth_check_1-300x276.png 300w, https:\/\/tenthplanet.in\/blogs\/wp-content\/uploads\/sites\/21\/2019\/06\/auth_check_1-768x707.png 768w, https:\/\/tenthplanet.in\/blogs\/wp-content\/uploads\/sites\/21\/2019\/06\/auth_check_1.png 873w\" sizes=\"auto, (max-width: 399px) 100vw, 399px\" \/><\/p>\n<ul>\n<li>After the connection is established , we should be able to browse the directories in the MSAD, here select the user that is created in the begining of configuring the MSAD.<\/li>\n<li>After the user selection , we have to select the role of the MSAD just like as we did for the user selection.<\/li>\n<li>Select the custom configuration and provide the search base for the user selected and keep the search filter value.<\/li>\n<li>In the Roles section keep the values for Role Attribute and Role Search Filter as shown in the below screen_shot. Note:- In the Role Search Filter provide the CN value as per the configs created , In my case it is (CN=tpt*).<\/li>\n<li>For the Group Search Base the value is same as the Role Search Base .<\/li>\n<li>Now click Save and Restart the Pentaho+ Server .<\/li>\n<li>Thats it Pentaho Plus BI Integration With Microsoft Active Directory is completed.<\/li>\n<\/ul>\n<p><strong>Installing and Configuring Tomcat IIS Connector<\/strong><\/p>\n<ul>\n<li>Download Tomcat iis connector from the below link,<br \/>\nhttps:\/\/github.com\/Bilal-S\/iis2tomcat\/releases<\/li>\n<li>After installing the file, double click on the Connector_setup.<\/li>\n<li>License agreement box pops up, Click on I accept button.<\/li>\n<li>Now click next.<\/li>\n<li>Now enter the login server and login port which you are going to use, and click next.<\/li>\n<li>Click the Enable remote access to apache tomcat and click next.<\/li>\n<li>In the pre configure setting uncheck all check boxes and click next.<\/li>\n<li>Click the Let me choose specific site option and click next<\/li>\n<li>Now click on default web site and click next.<\/li>\n<li>Select handler mapping select all the check box and click next.<\/li>\n<li>Now Click on install.<\/li>\n<\/ul>\n<p><strong>Installation and Configuration of IIS Role<\/strong><br \/>\nHere are the steps to add server roles:<\/p>\n<ul>\n<li>Under the Server Manager, select the Dashboard.<\/li>\n<li>Add a new Server Role.<\/li>\n<li>Under Roles, select Web Server (IIS).<\/li>\n<li>Select Application Development, and then select ISAPI Extensions and ISAPI Filters.<\/li>\n<li>Proceed to installation by clicking on Next, and then Install.<\/li>\n<li>Enable Windows Authentication<\/li>\n<li>Here are the steps for enabling Windows authentication:<\/li>\n<li>On IIS Manager, select the default website.<\/li>\n<li>Double-click on Authentication.<\/li>\n<li>Make sure Anonymous Authentication is disabled.<\/li>\n<li>Make sure Windows Authentication is enabled.<\/li>\n<\/ul>\n<p><strong>Pentaho+ Configurations:<\/strong><br \/>\nThis section contains the configuration steps for your Pentaho+ installation. You can find details on<br \/>\nthese topics in the following sections:<\/p>\n<ul>\n<li>Set tomcatAuthentication to False<\/li>\n<li>Enable preAuthenticatedProcessingFilter<\/li>\n<li>Configure authenticationManager<\/li>\n<li>Configure preAuthenticatedProcessingFilter<\/li>\n<li>Configure preAuthenticationProvider<\/li>\n<li>Configure exceptionTranslationFilter<\/li>\n<li>Configure exceptionTranslationFilterForWS<\/li>\n<li>Set Tomcat Authentication to False<\/li>\n<\/ul>\n<p><strong>Follow these steps to set tomcatAuthentication to False:<\/strong><br \/>\n1. Locate the following file: Pentaho-server\/tomcat\/conf\/server.xml<br \/>\n2. Locate the AJP connector entry and change it from:<br \/>\n&lt;!&#8211; Define an AJP 1.3 Connector on port 8009 &#8211;&gt;<br \/>\n&lt;Connector URIEncoding=&#8221;UTF-8&#8243; port=&#8221;8009&#8243; protocol=&#8221;AJP\/1.3&#8243;<br \/>\nredirectPort=&#8221;8443&#8243; \/&gt;<br \/>\nTo this:<br \/>\n&lt;!&#8211; Define an AJP 1.3 Connector on port 8009 &#8211;&gt;<br \/>\n&lt;Connector URIEncoding=&#8221;UTF-8&#8243; port=&#8221;8009&#8243; protocol=&#8221;AJP\/1.3&#8243;<br \/>\nenableLookups=&#8221;false&#8221; tomcatAuthentication=&#8221;false&#8221; redirectPort=&#8221;8443&#8243; \/&gt;<\/p>\n<p><strong>Enable Preauthenticated Processing Filter<\/strong><br \/>\nThese steps will help you enable preAuthenticatedProcessingFilter:<br \/>\n1. Locate the following file: \\pentaho-server\\pentaho-<br \/>\nsolutions\\system\\applicationContext-spring-security.xml<br \/>\n2. Locate the filterChainProxy and replace the patterns using this text:<br \/>\n&lt;sec:filter-chain pattern=&#8221;\/api\/repos\/dashboards\/print&#8221;<br \/>\nfilters=&#8221;securityContextHolderAwareRequestFilter,httpSessionPentahoSessionC<br \/>\nontextIntegrationFilter,httpSessionContextIntegrationFilter,preAuthenticate<br \/>\ndSecurityFilter,httpSessionReuseDetectionFilter,logoutFilter,authentication<br \/>\nProcessingFilter,basicProcessingFilter,requestParameterProcessingFilter,ano<br \/>\nnymousProcessingFilter,sessionMgmtFilter,exceptionTranslationFilter,filtrate<br \/>\nnvocationInterceptor&#8221; \/&gt;<br \/>\n&lt;sec:filter-chain pattern=&#8221;\/webservices\/**&#8221;<br \/>\nfilters=&#8221;httpSessionPentahoSessionContextIntegrationFilter,httpSessionConte<br \/>\nxtIntegrationFilter,preAuthenticatedProcessingFilter,basicProcessingFilter,<br \/>\nanonymousProcessingFilter,sessionMgmtFilter,securityContextHolderAwareReque<br \/>\nstFilterForWS,exceptionTranslationFilterForWS,filterInvocationInterceptorFo<br \/>\nrWS&#8221; \/&gt;<br \/>\n&lt;sec:filter-chain pattern=&#8221;\/api\/repos\/**&#8221;<br \/>\nfilters=&#8221;httpSessionPentahoSessionContextIntegrationFilter,httpSessionConte<br \/>\nxtIntegrationFilter,preAuthenticatedProcessingFilter,basicProcessingFilter,<br \/>\nrequestParameterProcessingFilter,anonymousProcessingFilter,sessionMgmtFilte<br \/>\nr,securityContextHolderAwareRequestFilterForWS,exceptionTranslationFilterFo<br \/>\nrWS,filterInvocationInterceptorForWS,preFlightFilter&#8221; \/&gt;<br \/>\n&lt;sec:filter-chain pattern=&#8221;\/api\/**&#8221;<br \/>\nfilters=&#8221;httpSessionPentahoSessionContextIntegrationFilter,httpSessionConte<br \/>\nxtIntegrationFilter,preAuthenticatedProcessingFilter,basicProcessingFilter,<br \/>\nrequestParameterProcessingFilter,anonymousProcessingFilter,sessionMgmtFilte<br \/>\nr,securityContextHolderAwareRequestFilterForWS,exceptionTranslationFilterFo<br \/>\nrWS,filterInvocationInterceptorForWS&#8221; \/&gt;<br \/>\n&lt;sec:filter-chain pattern=&#8221;\/plugin\/reporting\/api\/jobs\/**&#8221;<br \/>\nfilters=&#8221;httpSessionPentahoSessionContextIntegrationFilter,httpSessionConte<br \/>\nxtIntegrationFilter,preAuthenticatedProcessingFilter,basicProcessingFilter,<br \/>\nrequestParameterProcessingFilter,anonymousProcessingFilter,sessionMgmtFilte<br \/>\nr,securityContextHolderAwareRequestFilterForWS,exceptionTranslationFilterFo<br \/>\nrWS,filterInvocationInterceptorForWS,preFlightFilter&#8221; \/&gt;<br \/>\n&lt;sec:filter-chain pattern=&#8221;\/plugin\/**&#8221;<br \/>\nfilters=&#8221;httpSessionPentahoSessionContextIntegrationFilter,httpSessionConte<br \/>\nxtIntegrationFilter,preAuthenticatedProcessingFilter,basicProcessingFilter,<br \/>\nrequestParameterProcessingFilter,anonymousProcessingFilter,sessionMgmtFilte<br \/>\nr,securityContextHolderAwareRequestFilterForWS,exceptionTranslationFilterFo<br \/>\nrWS,filterInvocationInterceptorForWS&#8221; \/&gt;<br \/>\n&lt;sec:filter-chain pattern=&#8221;\/**&#8221;<br \/>\nfilters=&#8221;httpSessionPentahoSessionContextIntegrationFilter,httpSessionConte<br \/>\nxtIntegrationFilter,httpSessionReuseDetectionFilter,logoutFilter,preAuthent<br \/>\nicatedProcessingFilter,authenticationProcessingFilter,basicProcessingFilter<br \/>\n,requestParameterProcessingFilter,anonymousProcessingFilter,sessionMgmtFilt<br \/>\ner,securityContextHolderAwareRequestFilter,exceptionTranslationFilter,filte<br \/>\nrInvocationInterceptor&#8221; \/&gt;<\/p>\n<p><strong>Configure Authentication Manager<\/strong><br \/>\nFollow these steps to configure authenticationManager:<br \/>\n1. Locate the following file: \\pentaho-server\\pentaho-<br \/>\nsolutions\\system\\applicationContext-spring-security.xml<br \/>\n2. Replace the following authenticationManager:<br \/>\n&lt;bean id=&#8221;authenticationManager&#8221;<br \/>\nclass=&#8221;org.springframework.security.authentication.ProviderManager&#8221;&gt;<br \/>\n&lt;constructor-arg&gt;<br \/>\n&lt;util:list&gt;<br \/>\n&lt;pen:bean<br \/>\nclass=&#8221;org.springframework.security.authentication.AuthenticationProvider&#8221;\/<br \/>\n&gt;<br \/>\n&lt;ref bean=&#8221;anonymousAuthenticationProvider&#8221; \/&gt;<br \/>\n&lt;\/util:list&gt;<br \/>\n&lt;\/constructor-arg&gt;<br \/>\n&lt;property name=&#8221;authenticationEventPublisher&#8221;&gt;<br \/>\n&lt;ref bean=&#8221;defaultAuthenticationEventPublisher&#8221; \/&gt;<br \/>\n&lt;\/property&gt;<br \/>\n&lt;\/bean&gt;<br \/>\n3. Add the following authenticationManager:<br \/>\n&lt;!&#8211; ================ AUTHENTICATION ======================= &#8211;&gt;<br \/>\n&lt;bean id=&#8221;authenticationManager&#8221;<br \/>\nclass=&#8221;org.springframework.security.authentication.ProviderManager&#8221;&gt;<br \/>\n&lt;constructor-arg&gt;<br \/>\n&lt;util:list&gt;<br \/>\n&lt;ref bean=&#8221;preAuthAuthenticationProvider&#8221; \/&gt;<br \/>\n&lt;ref bean=&#8221;anonymousAuthenticationProvider&#8221;\/&gt;<br \/>\n&lt;\/util:list&gt;<br \/>\n&lt;\/constructor-arg&gt;<br \/>\n&lt;property name=&#8221;authenticationEventPublisher&#8221;&gt;<br \/>\n&lt;ref bean=&#8221;defaultAuthenticationEventPublisher&#8221; \/&gt;<br \/>\n&lt;\/property&gt;<br \/>\n&lt;\/bean&gt;<br \/>\nConfigure Preauthenticated Processing Filter<br \/>\nIn the same file, add the following bean for preAuthenticatedProcessingFilter:<br \/>\n&lt;!&#8212; IWA &#8212;&gt;<br \/>\n&lt;bean id=&#8221;preAuthenticatedProcessingFilter&#8221;<br \/>\nclass=&#8221;org.pentaho.platform.web.http.security.UsernameSubstringPreAut<br \/>\nhenticatedProcessingFilter&#8221;&gt;<br \/>\n&lt;property name=&#8221;authenticationManager&#8221;&gt;<br \/>\n&lt;ref bean=&#8221;authenticationManager&#8221;\/&gt;<br \/>\n&lt;\/property&gt;<br \/>\n&lt;property name=&#8221;regex&#8221; value=&#8221;.+\\\\(.+)&#8221;\/&gt;<br \/>\n&lt;\/bean&gt;<\/p>\n<p><strong>Configure Preauthentication Provider<\/strong><br \/>\nIn the same file, add the following bean for preAuthAuthenticationProvider, just below the<br \/>\npreAuthenticationProcessingFilter:<br \/>\n&lt;bean id=&#8221;preAuthAuthenticationProvider&#8221;<br \/>\nclass=&#8221;org.springframework.security.web.authentication.preauth.PreAuthentic<br \/>\natedAuthenticationProvider&#8221; &gt;<br \/>\n&lt;property name=&#8221;preAuthenticatedUserDetailsService&#8221;&gt;<br \/>\n&lt;bean id=&#8221;userDetailsServiceWrapper&#8221;<br \/>\nclass=&#8221;org.springframework.security.core.userdetails.UserDetailsByNameServi<br \/>\nceWrapper&#8221;&gt;<br \/>\n&lt;property name=&#8221;userDetailsService&#8221;<br \/>\nref=&#8221;ldapUserDetailsService&#8221; \/&gt;<br \/>\n&lt;\/bean&gt;<br \/>\n&lt;\/property&gt;<br \/>\n&lt;\/bean&gt;<\/p>\n<p><strong>Configure Exception Translation Filter<\/strong><br \/>\nHere are the steps for configuring exceptionTranslationFilter:<br \/>\n1. Locate the following file: \\pentaho-server\\pentaho-<br \/>\nsolutions\\system\\applicationContext-spring-security.xml<br \/>\n2. Locate the following bean, exceptionTranslationFilter:<br \/>\n&lt;bean id=&#8221;exceptionTranslationFilter&#8221;<br \/>\nclass=&#8221;org.springframework.security.web.access.ExceptionTranslationFilter&#8221;&gt;<br \/>\n&lt;constructor-arg ref=&#8221;authenticationProcessingFilterEntryPoint&#8221;\/&gt;<br \/>\n&lt;property name=&#8221;accessDeniedHandler&#8221;&gt;<br \/>\n&lt;bean<br \/>\nclass=&#8221;org.springframework.security.web.access.AccessDeniedHandlerImpl&#8221; \/&gt;<br \/>\n&lt;\/property&gt;<br \/>\n&lt;\/bean&gt;<br \/>\n3. Replace it with the following bean declaration:<br \/>\n&lt;bean id=&#8221;exceptionTranslationFilter&#8221;<br \/>\nclass=&#8221;org.springframework.security.web.access.ExceptionTranslationFilter&#8221;&gt;<br \/>\n&lt;constructor-arg ref=&#8221;preAuthenticatedProcessingFilterEntryPoint&#8221; \/&gt;<br \/>\n&lt;property name=&#8221;accessDeniedHandler&#8221;&gt;<br \/>\n&lt;bean<br \/>\nclass=&#8221;org.springframework.security.web.access.AccessDeniedHandlerImpl&#8221; \/&gt;<br \/>\n&lt;\/property&gt;<br \/>\n&lt;\/bean&gt;<br \/>\n4. Add the following bean, below the exceptionTranslationFitler:<br \/>\n&lt;bean id=&#8221;preAuthenticatedProcessingFilterEntryPoint&#8221;<br \/>\nclass=&#8221;org.springframework.security.web.authentication.Http403ForbiddenEntr<br \/>\nyPoint&#8221; \/&gt;<\/p>\n<p><strong>Configure Exception Translation Filter for WS<\/strong><br \/>\nThese steps will help you configure exceptionTranslationFilterForWS:<br \/>\n1. Locate the following bean:<br \/>\n&lt;bean id=&#8221;exceptionTranslationFilterForWS&#8221;<br \/>\nclass=&#8221;org.springframework.security.web.access.ExceptionTranslationFilter&#8221;&gt;<br \/>\n&lt;constructor-arg ref=&#8221;basicProcessingFilterEntryPoint&#8221;\/&gt;<br \/>\n&lt;property name=&#8221;accessDeniedHandler&#8221;&gt;<br \/>\n&lt;bean<br \/>\nclass=&#8221;org.springframework.security.web.access.AccessDeniedHandlerImpl&#8221; \/&gt;<br \/>\n&lt;\/property&gt;<br \/>\n&lt;\/bean&gt;<br \/>\n2. Replace it with the following bean:<br \/>\n&lt;bean id=&#8221;exceptionTranslationFilterForWS&#8221;<br \/>\nclass=&#8221;org.springframework.security.web.access.ExceptionTranslationFilter&#8221;&gt;<br \/>\n&lt;constructor-arg ref=&#8221;preAuthenticatedProcessingFilterEntryPoint&#8221; \/&gt;<br \/>\n&lt;property name=&#8221;accessDeniedHandler&#8221;&gt;<br \/>\n&lt;bean<br \/>\nclass=&#8221;org.springframework.security.web.access.AccessDeniedHandlerImpl&#8221; \/&gt;<br \/>\n&lt;\/property&gt;<br \/>\n&lt;\/bean&gt;<br \/>\n3. Save your changes.<br \/>\n4. Restart Pentaho+ Server.<br \/>\n5. Test the changes. You should be able to log into the URL served by IIS. Go to Internet<br \/>\nExplorer and type the following URL: http:\/\/localhost\/pentaho\/.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1835\" src=\"https:\/\/tenthplanet.in\/blogs\/wp-content\/uploads\/sites\/21\/2019\/06\/login-1-300x157.png\" alt=\"\" width=\"522\" height=\"273\" title=\"\" srcset=\"https:\/\/tenthplanet.in\/blogs\/wp-content\/uploads\/sites\/21\/2019\/06\/login-1-300x157.png 300w, https:\/\/tenthplanet.in\/blogs\/wp-content\/uploads\/sites\/21\/2019\/06\/login-1-768x403.png 768w, https:\/\/tenthplanet.in\/blogs\/wp-content\/uploads\/sites\/21\/2019\/06\/login-1.png 1006w\" sizes=\"auto, (max-width: 522px) 100vw, 522px\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Configuring Pentaho+ with Integrated Windows authentication<\/p>\n","protected":false},"author":23,"featured_media":1874,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[424],"tags":[530,499],"class_list":["post-1830","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-pentaho","tag-integrated-windows-authentication","tag-pentaho"],"acf":[],"_links":{"self":[{"href":"https:\/\/tenthplanet.in\/blogs\/wp-json\/wp\/v2\/posts\/1830","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tenthplanet.in\/blogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tenthplanet.in\/blogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tenthplanet.in\/blogs\/wp-json\/wp\/v2\/users\/23"}],"replies":[{"embeddable":true,"href":"https:\/\/tenthplanet.in\/blogs\/wp-json\/wp\/v2\/comments?post=1830"}],"version-history":[{"count":1,"href":"https:\/\/tenthplanet.in\/blogs\/wp-json\/wp\/v2\/posts\/1830\/revisions"}],"predecessor-version":[{"id":11435,"href":"https:\/\/tenthplanet.in\/blogs\/wp-json\/wp\/v2\/posts\/1830\/revisions\/11435"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tenthplanet.in\/blogs\/wp-json\/wp\/v2\/media\/1874"}],"wp:attachment":[{"href":"https:\/\/tenthplanet.in\/blogs\/wp-json\/wp\/v2\/media?parent=1830"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tenthplanet.in\/blogs\/wp-json\/wp\/v2\/categories?post=1830"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tenthplanet.in\/blogs\/wp-json\/wp\/v2\/tags?post=1830"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}