{"id":309,"date":"2026-06-28T12:24:36","date_gmt":"2026-06-28T12:24:36","guid":{"rendered":"https:\/\/sme-access.com\/?p=309"},"modified":"2026-06-28T12:24:47","modified_gmt":"2026-06-28T12:24:47","slug":"my-iam-thoughts-about-agentic-ai-part-2","status":"publish","type":"post","link":"https:\/\/sme-access.com\/?p=309","title":{"rendered":"My IAM thoughts about Agentic AI \u2013 Part 2"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In <a href=\"https:\/\/sme-access.com\/?p=233\">Part 1<\/a> of this series, we explored why Agentic AI breaks the identity model we spent the last decade building: agents have no native identity, delegation chains collapse, and static credentials don&#8217;t fit dynamic behaviour. The promise was that in Part 2 we will stop talking and start building.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So this is the practical half. We took the theory from Part 1, RFC 8693 token exchange, a Security Token Service, Workload Identity Federation, SPIFFE and turned it into a working demo. Then I built it <em>twice<\/em>, on purpose, because the question I kept coming back to wasn&#8217;t &#8220;can we make it work?&#8221; It was &#8220;how few secrets can we get away with storing?&#8221;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Let&#8217;s start and explain what I mean, and then walk through the two versions.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The same scenario, made real<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">I kept the same story from Part 1. A citizen, let&#8217;s call him Adam, submits a housing benefit claim through a government portal. Three AI agents process it end to end, and <strong>no human caseworker reviews the decision<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\">An Orchestration Agent<\/mark><\/strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\"> <\/mark>receives the claim and decides what has to be verified.<\/li>\n\n\n\n<li><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\">A Verification Agent<\/mark><\/strong> cross-checks the national ID, pulls income from the tax authority, and confirms residency with the municipal registry.<\/li>\n\n\n\n<li><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\">An<\/mark><\/strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\"><strong> <\/strong><\/mark><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\">Approval<\/mark><\/strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\"><strong> <\/strong><\/mark><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\">Agent<\/mark><\/strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\"> <\/mark>reviews the verdict, approves the claim, and triggers the payment.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">When no human sits in the loop, identity and accountability can&#8217;t be a comment in a log file. They have to be cryptographic and complete at every hop. The demo tries to prove two things at once, and it&#8217;s worth separating them clearly, because they&#8217;re easy to mush together:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Layer 1 &#8211; Workload Identity.<\/strong> &#8220;Is this workload even allowed to talk to the model provider?&#8221; This is the workload authenticating itself to Anthropic, <strong><span style=\"text-decoration: underline;\">and it&#8217;s where the two versions differ<\/span><\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Layer 2 &#8211; Delegation Identity.<\/strong> &#8220;Which agent delegated to which, and on whose behalf?&#8221; This is the RFC 8693 <code>act<\/code> chain from Part 1, citizen \u2192 orchestration \u2192 verification \u2192 approval, nested inside every token. This part is <em>identical<\/em> in both versions, because the delegation story is independent of how the workload proved itself.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That split is worth holding on to. It&#8217;s the reason I built two versions: Layer 2 never changes, and Layer 1 is where the question lives.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Why two versions?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In Part 1 we stated that &#8220;long-lived, broad credentials are a security disaster waiting to happen&#8221; and that workload identity (SPIFFE\/SPIRE) is &#8220;the cryptographic root everything else is built on.&#8221; That&#8217;s easy to write in a blog post. It&#8217;s harder to feel until you watch a credential actually disappear.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So I built a deliberate progression (with the help of claude code). Think of it as peeling away secrets one layer at a time:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>v<\/strong>1 answers <em>how<\/em> the workload authenticates to Anthropic, and removes the static <code>sk-ant-...<\/code> API key. But it still holds one secret: <span style=\"text-decoration: underline;\">an OAuth client secret<\/span>.<\/li>\n\n\n\n<li><strong>v2<\/strong> removes that last secret too. The workload authenticates with a SPIFFE identity it doesn&#8217;t <em>store<\/em> anywhere, it&#8217;s proven by <span style=\"text-decoration: underline;\"><em>what the workload is<\/em>, not by <em>what it knows<\/em><\/span>.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The point I&#8217;d ask you to keep in mind: the Anthropic-side token exchange and the agent-to-agent delegation are <strong>the same<\/strong> in both versions. The only thing that changes is the source of the workload&#8217;s very first identity.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">A quick word on Anthropic Workload Identity Federation<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Both versions lean on a capability that made this demo possible in the first place: <strong>Workload Identity Federation (WIF)<\/strong> on the Anthropic platform.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The fragile way we&#8217;d normally authenticate to a model API: generate a long-lived API key (<code>sk-ant-...<\/code>), paste it into an environment variable, and hope it never leaks. That key is a bearer secret. It doesn&#8217;t expire on its own. It&#8217;s exactly the kind of <strong>standing credential <\/strong>Part 1 warned about.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-black-color\"><code>WIF<\/code><\/mark> flips this around. Instead of storing a permanent key, your workload shows up holding an <strong>external JWT<\/strong> issued by an identity provider (like Idira) you&#8217;ve registered as trusted. Anthropic then does three things:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Validates the JWT&#8217;s signature against a <strong>federation issuer<\/strong> you registered.<\/li>\n\n\n\n<li>Matches the JWT against a <strong>federation rule<\/strong>, a policy that says &#8220;a token from issuer X with subject Y is allowed to act as service account Z.&#8221;<\/li>\n\n\n\n<li>Hands back a <strong>short-lived access token<\/strong> (<code>sk-ant-oat01-...<\/code>) that expires in 10 min (or less, depending on your configuration).<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">The mechanism on the wire is <strong>RFC 7523<\/strong>, the JWT-bearer grant: <code>grant_type = urn:ietf:params:oauth:grant-type:jwt-bearer<\/code>, with your external JWT dropped into the <code>assertion<\/code> field. You trade a JWT you already hold for a fresh, short-lived token scoped to your service account.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is the hinge of the whole demo. Once you have a way to exchange any trusted JWT for an Anthropic token, the only question left is: <strong>where does that first JWT come from, and how much of a secret do you have to keep to get it?<\/strong> v1 and v2 are two answers to exactly that question.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">v1 &#8211; OAuth2 federation: no API key but it keeps one secret !<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In v1 the trusted JWT comes from <strong>Idira<\/strong>, an Idira tenant acting as the Oauth provider. The workload runs an OAuth <strong>client credentials<\/strong> grant: a machine-to-machine flow. It sends its <code>client_id<\/code> and <code>client_secret<\/code> over HTTP Basic auth, and <strong>Idira<\/strong> returns a signed JWT.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The passport analogy holds up well here. <strong>Idira<\/strong> is the passport office. The JWT is a passport with an expiry date, issued to the workload only after it proves itself with credentials. The workload then presents that passport to Anthropic (RFC 7523), and Anthropic issues the short-lived token everything else runs on.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The full chain looks like this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-white-color\">Idira\n   \u2502  client credentials grant (client_id + client_secret)\n   \u25bc\nOAuth JWT   sub: &lt;client-id>   iss: https:\/\/tenantID.id.cyberark.cloud\n   \u2502  presented to Anthropic (RFC 7523 jwt-bearer)\n   \u25bc\nAnthropic WIF token  (sk-ant-oat01-..., 10 min \/ 600 sec)\n   \u2502  authenticates every Agent call\n   \u25bc\nOrchestration \u2500\u2500&#91;STS, RFC 8693]\u2500\u2500> Verification \u2500\u2500&#91;STS, RFC 8693]\u2500\u2500<\/mark>><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-white-color\"> Approval\n   \u2502\n   \u25bc\nAudit trail: Idira --> Workload --> Citizen --> Agent --> Agent  (all cryptographic)<\/mark><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The heart of v1 is one small module that does two steps. Step one runs the client credentials grant against Idira and gets back the JWT (<code>id_token<\/code>). Step two performs the RFC 7523 exchange against Anthropic and gets back the <code>sk-ant-oat01-...<\/code> token. From there, the three agents make their Claude calls with a <strong>Bearer token<\/strong>, not an <code>x-api-key<\/code> header, and every agent-to-agent hop runs through the STS to grow the <code>act<\/code> chain.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>What v1 wins:<\/strong> there is no static <code>sk-ant-...<\/code> API key anywhere. The workload&#8217;s Anthropic credential is minted on demand and dies in an 10 minutes. If it leaks, it&#8217;s near-worthless within 10 minutes. Idira act as an OAuth server, so we can control and audit the usage of the client id and client secret.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>What v1 still carries:<\/strong> the client secret. It lives in a <code>.env<\/code> file. You have to store it, protect it, and rotate it. In production it belongs in a secrets manager (like Idira Secret Manager &#8211; conjur for the very old \ud83d\ude42), but it&#8217;s still a thing you <em>know<\/em>, which means it&#8217;s still a thing that can leak. We traded a permanent API key for a permanent client secret. That&#8217;s progress, but it isn&#8217;t the finish line.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you&#8217;ve ever chased the <code>secret zero<\/code> problem, the credential you need to bootstrap all your other credentials, you can probably already see where this is heading.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">v2 &#8211; SPIFFE: remove the last secret<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">v2 asks the obvious follow-up: what if the workload didn&#8217;t have to <em>know<\/em> anything to prove who it is? What if its identity came from <em>what it is<\/em>?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That&#8217;s what <strong>SPIFFE<\/strong> gives us. SPIFFE (Secure Production Identity Framework For Everyone) is an open standard for giving workloads unique and verifiable identities. A SPIFFE ID looks like a URL:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-white-color\">spiffe:\/\/sme-access.com\/workload\/benefit-processing\n        \u2514\u2500 trust domain \u2518 \u2514\u2500\u2500\u2500\u2500 workload path \u2500\u2500\u2500\u2500\u2518<\/mark><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Package that identity as a signed JWT and you get a <strong>JWT-SVID<\/strong>, which is exactly the kind of token Anthropic&#8217;s WIF already knows how to consume. Same RFC 7523 exchange, different source.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-white-color\">Note: the demo uses JWT-SVID. X.509-SVID exists and serves a different set of use cases.<\/mark><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>SPIRE<\/strong> is the reference implementation. It has two parts, and the analogy from before extends cleanly:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The <strong>SPIRE Server<\/strong> is the certificate authority and passport office. It holds the signing keys and the registry of who&#8217;s allowed to be whom.<\/li>\n\n\n\n<li>The <strong>SPIRE Agent<\/strong> is the passport officer at the door. It <strong>attests<\/strong> the workload, proves what it is, and hands it an SVID (SPIFFE Verifiable Identity Document) through a local Unix socket.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The key word is <strong>attestation<\/strong>, and it&#8217;s the thing that replaces the secret. How does the agent know the process asking for an identity really is <code>benefit-processing<\/code> and not an impostor? In this demo we use the Docker workload attestor: the agent inspects the calling process, traces it to its container, reads the container&#8217;s label (<code>app=benefit-processing<\/code>), and matches it against a registration entry. <strong>No secret is exchanged.<\/strong> The identity is proven by what the container <em>is<\/em>. There&#8217;s no client ID, no client secret, no API key stored anywhere.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The chain in v2:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-white-color\">SPIRE Server  (trust domain: sme-access.com)\n   \u2502  signs (no secret held by the workload)\n   \u25bc\nJWT-SVID   sub: spiffe:\/\/sme-access.com\/workload\/benefit-processing\n   \u2502       iss: https:\/\/spire.sme-access.com\n   \u2502  presented to Anthropic (RFC 7523 jwt-bearer)\n   \u25bc\nAnthropic WIF token  (sk-ant-oat01-..., 10 min)\n   \u2502  authenticates every Claude call\n   \u25bc\nOrchestration \u2500\u2500&#91;STS, RFC 8693]\u2500\u2500> Verification \u2500\u2500&#91;STS, RFC 8693]\u2500\u2500> Approval\n   \u2502\n   \u25bc\nAudit trail: SPIRE --> Workload --> Citizen --> Agent --> Agent  (all cryptographic)<\/mark><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">One implementation detail caught me out, so it&#8217;s worth flagging. v1&#8217;s Idira tenant is on the public internet, so Anthropic can auto-discover its keys via OIDC discovery. The SPIRE Server in v2 runs locally and isn&#8217;t reachable from the internet, so Anthropic can&#8217;t go fetch its keys. The fix is to register the issuer with an <strong>inline JWKS<\/strong>: you export the SPIRE Server&#8217;s public keys and paste them directly into the Anthropic Console. Verification still works the same way, you just hand over the keys manually instead of pointing at a discovery URL.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The code reflects how little actually changes between the two. v2&#8217;s auth module tries SPIFFE first, and if the SPIRE socket isn&#8217;t present, it falls back to the v1 OAuth path.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What this looks like running<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Both demos run in two phases. Phase 0 is the workload identity dance, the workload gets its JWT (from Idira in v1, from SPIRE in v2) and exchanges it for the Anthropic token. Phase 1 is the claim processing, where the three agents resolve Adam&#8217;s claim and each hop grows the <code>act<\/code> chain through the STS.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In v1, Phase 0 prints the Idira JWT arriving with its <code>sub<\/code> and <code>iss<\/code>, then the Anthropic Bearer token being minted.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In v2, the same step instead shows a SPIFFE JWT-SVID with <code>sub: spiffe:\/\/sme-access.com\/workload\/benefit-processing<\/code>, fetched with no secret.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Everything after that, the orchestration \u2192 verification \u2192 approval flow and the final audit trail, is indistinguishable between the two. That&#8217;s the proof we were after: swap the root of identity, and the rest of the system doesn&#8217;t even notice.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The audit trail at the end reads like the chain of authorization letters from Part 1: <code>citizen \u2192 orchestration \u2192 verification \u2192 approval<\/code>, every hop cryptographically recorded, no caseworker involved, and full provenance preserved.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Running it yourself<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">I&#8217;ve deliberately kept this post at the level of the <em>ideas<\/em>, what each version proves and why the secret keeps shrinking, rather than turning it into a setup manual. The full step-by-step configuration for both versions lives in the <strong>README files in the GitHub repositories<\/strong>: how to set up the Idira tenant and OAuth2 client for v1, how to bootstrap the SPIRE Server and Agent for v2, how to register the federation issuer and rule in the Anthropic Console, and how to run each demo end to end.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Where to go from here<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If Part 1 was the &#8220;why,&#8221; this was the &#8220;how,&#8221; twice over, so the cost of each secret you remove is visible. We&#8217;d suggest starting where Part 1 pointed: inventory your agents, establish workload identity, route every agent-to-agent call through an STS, and build provenance into your logs. v1 is a reasonable first step if you already live in an OAuth world. v2 is where it&#8217;s worth ending up, because <code>the only secret you can't leak is the one you never had<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But let&#8217;s be precise about what Part 2 actually solved: <strong>one problem<\/strong>, how to issue a unique, verifiable identity to an agent using current standards. That&#8217;s it. We didn&#8217;t touch access control. We didn&#8217;t touch permissions. We didn&#8217;t ask what that agent is actually allowed to do once it has a valid token.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That&#8217;s the next frontier: <strong>Just-In-Time access and Zero Standing Privilege for agentic workloads<\/strong>. What does it mean to grant an agent the minimum privilege it needs, only for the duration of a specific task, with no persistent entitlements sitting around waiting to be abused? <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That&#8217;s probably Part 3 \ud83d\ude09<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Both demos are open, and the READMEs walk through the full setup for each.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Thanks for reading both parts.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Reference<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/rfc8693\">RFC 8693 \u2013 OAuth 2.0 Token Exchange<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc7523\">RFC 7523 \u2013 JWT Profile for OAuth 2.0 Client Authentication and Authorization Grants<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/platform.claude.com\/docs\/en\/manage-claude\/workload-identity-federation\">Anthropic Workload Identity Federation<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/spiffe.io\">SPIFFE \/ SPIRE<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/docs.cyberark.com\/portal\/latest\/en\/docs.htm\">Idira documentation<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/claude.com\/blog\/zero-trust-for-ai-agents\">Zero Trust for AI Agent<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/developer.cyberark.com\/blog\/can-spiffe-solve-the-secret-zero-problem\/\">Can SPIFFE Solve the Secret Zero Problem?<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/Lemehdi\/agentic-identity-demo-oauth\">Code base for v1 &#8211; OAuth2<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/Lemehdi\/agentic-identity-demo-spiffe\">Code base for v2 &#8211; SPIFFE<\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In Part 1 of this series, we explored why Agentic AI breaks the identity model we spent the last decade building: agents have no native identity, delegation chains collapse, and static credentials don&#8217;t fit dynamic behaviour. The promise was that in Part 2 we will stop talking and start building. So this is the practical [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-container-style":"default","site-container-layout":"default","site-sidebar-layout":"default","disable-article-header":"default","disable-site-header":"default","disable-site-footer":"default","disable-content-area-spacing":"default","footnotes":""},"categories":[17],"tags":[20,21,18,23,22,19],"class_list":["post-309","post","type-post","status-publish","format-standard","hentry","category-identity-security","tag-agenticai","tag-cybersecurity","tag-iam","tag-identiysecurity","tag-techstrategy","tag-zerotrust"],"_links":{"self":[{"href":"https:\/\/sme-access.com\/index.php?rest_route=\/wp\/v2\/posts\/309","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sme-access.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sme-access.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sme-access.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sme-access.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=309"}],"version-history":[{"count":5,"href":"https:\/\/sme-access.com\/index.php?rest_route=\/wp\/v2\/posts\/309\/revisions"}],"predecessor-version":[{"id":332,"href":"https:\/\/sme-access.com\/index.php?rest_route=\/wp\/v2\/posts\/309\/revisions\/332"}],"wp:attachment":[{"href":"https:\/\/sme-access.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=309"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sme-access.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=309"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sme-access.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=309"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}