{"id":2946,"date":"2019-08-12T11:04:24","date_gmt":"2019-08-12T01:04:24","guid":{"rendered":"https:\/\/ashleyknowles.com\/?p=2946"},"modified":"2019-08-12T11:04:25","modified_gmt":"2019-08-12T01:04:25","slug":"using-json-web-tokens-with-ca-api-gateway","status":"publish","type":"post","link":"https:\/\/ashleyknowles.com\/2019\/08\/12\/using-json-web-tokens-with-ca-api-gateway\/","title":{"rendered":"Using JSON Web Tokens with CA API Gateway"},"content":{"rendered":"\n<p>Over the past 3 years or so working in a software team that develops APIs\/integrations between many complex systems, we&#8217;ve seen the rise of the JSON Web Token. This humble little block of base64 encoded data is now at the core of most every API we build, and is heavily used in enforcing confidentiality and integrity in many different ways in our landscape. <\/p>\n\n\n\n<p>CA&#8217;s API Gateway product includes functionality out of the box to handle JSON Web Tokens. But it comes with some nuances. Having been the API Gateway SME across many projects, I&#8217;ve had to decipher every bit of how CA&#8217;s mysterious JSON assertions work.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Public &amp; Private Keys<\/h2>\n\n\n\n<p>First things first. <strong>Not all public keys are made equal!<\/strong> CA&#8217;s product is unable to ingest RSA public keys for use in JWTs; it currently only gives you the option to use a public key where you have a corresponding private key installed (wtf mate), or you have a valid x509 certificate for (eg. SSL)&#8230; This is hardly useful.<\/p>\n\n\n\n<p>To get around this, we use this little snippet to convert a perfectly good RSA public key into a JWK format &#8211; <strong><a href=\"https:\/\/www.example-code.com\/dotnet-core\/publickey_rsa_get_jwk_format.asp\">(.NET Core C#) Get RSA Public Key in JWK Format (JSON Web Key)<\/a><\/strong>. To use this in the CA gateway, we wrap the JWK into a JWKS format, creating a JSON array of keys, and storing this in a context variable. This context variable is then referenced in the Encode\/Decode Json Web Token assertion.<\/p>\n\n\n\n<p>Next; JWKS keys can have multiple uses; in the case of CA, the key use MUST be specified, and it is not appropriate to simply state that the use is for encryption AND signing; instead, if a key is usable for both, you must create two keys within the JWKS with all things equal, and set the <strong><em>use<\/em><\/strong> value to <em>&#8216;enc&#8217;<\/em> or <em>&#8216;sig&#8217;<\/em> appropriately. <\/p>\n\n\n\n<p>The result of both of these actions is shown below:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"keys\": [\n    {\n      \"e\": \"AQAB\",\n      \"kty\": \"RSA\",\n      \"alg\": \"RS256\",\n      \"n\": \"uObuBVbjcjxgv8cfRc3......\",\n      \"use\": \"sig\",\n      \"kid\": \"3494b1e786cdad092e423766bbe37f54ed87b22d\"\n    },\n    {\n      \"alg\": \"RS256\",\n      \"n\": \"uObuBVbjcjxgv8cfRc3......\",\n      \"use\": \"enc\",\n      \"kid\": \"60f4060e58d75fd3f70beff88c794a775327aa31\",\n      \"e\": \"AQAB\",\n      \"kty\": \"RSA\"\n    }\n  ]\n}<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1072\" height=\"237\" src=\"https:\/\/i2.wp.com\/ashleyknowles.net\/wp-content\/uploads\/2019\/08\/image.png?fit=640%2C141&amp;ssl=1\" alt=\"\" class=\"wp-image-2949\" srcset=\"https:\/\/ashleyknowles.com\/wp-content\/uploads\/2019\/08\/image.png 1072w, https:\/\/ashleyknowles.com\/wp-content\/uploads\/2019\/08\/image-300x66.png 300w, https:\/\/ashleyknowles.com\/wp-content\/uploads\/2019\/08\/image-768x170.png 768w, https:\/\/ashleyknowles.com\/wp-content\/uploads\/2019\/08\/image-640x141.png 640w, https:\/\/ashleyknowles.com\/wp-content\/uploads\/2019\/08\/image-260x57.png 260w, https:\/\/ashleyknowles.com\/wp-content\/uploads\/2019\/08\/image-50x11.png 50w, https:\/\/ashleyknowles.com\/wp-content\/uploads\/2019\/08\/image-150x33.png 150w\" sizes=\"(max-width: 1072px) 100vw, 1072px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Combining JWS &amp; JWE<\/h2>\n\n\n\n<p>Creating JWT&#8217;s that are both signed and encrypted is actually simple with the CA API Gateway. Unfortunately, the reverse is complex as CA poorly documents that you must do this in multiple steps; unlike creating a JWS\/JWE token, there is not a single assertion approach for the reverse. <\/p>\n\n\n\n<p>The process is as follows:<\/p>\n\n\n\n<p>1. Decode Json Web Token\n<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Decrypts the token; specify the private key to use to decrypt<\/li><li><strong>The output is an unencrypted signed JWT (JWS)<\/strong><\/li><li>Use the ${decryptedPayload.plaintext} variable to reference the unencrypted JWT<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"571\" height=\"337\" src=\"https:\/\/ashleyknowles.com\/wp-content\/uploads\/2019\/08\/image-2.png\" alt=\"\" class=\"wp-image-2951\" srcset=\"https:\/\/ashleyknowles.com\/wp-content\/uploads\/2019\/08\/image-2.png 571w, https:\/\/ashleyknowles.com\/wp-content\/uploads\/2019\/08\/image-2-300x177.png 300w, https:\/\/ashleyknowles.com\/wp-content\/uploads\/2019\/08\/image-2-247x146.png 247w, https:\/\/ashleyknowles.com\/wp-content\/uploads\/2019\/08\/image-2-50x30.png 50w, https:\/\/ashleyknowles.com\/wp-content\/uploads\/2019\/08\/image-2-127x75.png 127w\" sizes=\"(max-width: 571px) 100vw, 571px\" \/><\/figure>\n\n\n\n<p>2. Decode Json Web Token (again)<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Verifies the signature of the JWT (JWS)<\/li><li>Use a JWKS for the recipient key!<\/li><li>Use ${output.payload} to reference the data in the token<\/li><li>&#8220;Fail on invalid signature&#8221; should<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"569\" height=\"338\" src=\"https:\/\/ashleyknowles.com\/wp-content\/uploads\/2019\/08\/image-4.png\" alt=\"\" class=\"wp-image-2953\" srcset=\"https:\/\/ashleyknowles.com\/wp-content\/uploads\/2019\/08\/image-4.png 569w, https:\/\/ashleyknowles.com\/wp-content\/uploads\/2019\/08\/image-4-300x178.png 300w, https:\/\/ashleyknowles.com\/wp-content\/uploads\/2019\/08\/image-4-246x146.png 246w, https:\/\/ashleyknowles.com\/wp-content\/uploads\/2019\/08\/image-4-50x30.png 50w, https:\/\/ashleyknowles.com\/wp-content\/uploads\/2019\/08\/image-4-126x75.png 126w\" sizes=\"(max-width: 569px) 100vw, 569px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n<!-- Speed Sense for AdSense WordPress Plugin: https:\/\/wordpress.org\/plugins\/speed-sense\/ -->\n<div id=\"ssp0\" style=\"float:none;margin:10px 0 10px 0;text-align:center;width:100%;\">\n<ins class=\"adsbygoogle\" id=\"adsgoogle0\" style=\"display:inline-block;width:728px;height:90px\" data-ad-client=\"ca-pub-1165198243050639\" data-ad-slot=\"3345500613\"><\/ins><script>var adsxpls={\"ads\":[{\"w\":1024,\"sw\":728,\"sh\":90},{\"w\":640,\"sw\":300,\"sh\":250},{\"w\":320,\"sw\":180,\"sh\":150}],\"f\":null,\"code\":null,\"w\":document.documentElement.offsetWidth};adsxpls.ads.forEach(function(ad){if(0==((ad.w>adsxpls.w)||(0==((adsxpls.f==null)||(ad.w>adsxpls.f.w)))))adsxpls.f=ad;});if(adsxpls.f==null)adsxpls.f=adsxpls.ads[0];document.getElementById(\"adsgoogle0\").setAttribute(\"style\",\"width:\"+adsxpls.f.sw+\"px;height:\"+adsxpls.f.sh+\"px;\");\t\t\t\t\t\t\t\t\t\t\t\tdocument.getElementById(\"ssp0\").setAttribute(\"style\",document.getElementById(\"ssp0\").getAttribute(\"style\")+\"max-width:\"+adsxpls.f.sw+\"px;\");(adsbygoogle = window.adsbygoogle || []).push({});<\/script>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Over the past 3 years or so working in a software team that develops APIs\/integrations between many complex systems, we&#8217;ve seen the rise of the JSON Web Token. This humble little block of base64 encoded data is now at the core of most every API we build, and is heavily used in enforcing confidentiality and [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-2946","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Using JSON Web Tokens with CA API Gateway<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ashleyknowles.com\/2019\/08\/12\/using-json-web-tokens-with-ca-api-gateway\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Using JSON Web Tokens with CA API Gateway\" \/>\n<meta property=\"og:description\" content=\"Over the past 3 years or so working in a software team that develops APIs\/integrations between many complex systems, we&#8217;ve seen the rise of the JSON Web Token. This humble little block of base64 encoded data is now at the core of most every API we build, and is heavily used in enforcing confidentiality and [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ashleyknowles.com\/2019\/08\/12\/using-json-web-tokens-with-ca-api-gateway\/\" \/>\n<meta property=\"og:site_name\" content=\"ashley knowles\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/facebook.com\/ashleyknowles\" \/>\n<meta property=\"article:published_time\" content=\"2019-08-12T01:04:24+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-08-12T01:04:25+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i2.wp.com\/ashleyknowles.net\/wp-content\/uploads\/2019\/08\/image.png?fit=640%2C141&amp;ssl=1\" \/>\n<meta name=\"author\" content=\"Ashley\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ashkbne\" \/>\n<meta name=\"twitter:site\" content=\"@ashkbne\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ashley\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/ashleyknowles.com\\\/2019\\\/08\\\/12\\\/using-json-web-tokens-with-ca-api-gateway\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ashleyknowles.com\\\/2019\\\/08\\\/12\\\/using-json-web-tokens-with-ca-api-gateway\\\/\"},\"author\":{\"name\":\"Ashley\",\"@id\":\"https:\\\/\\\/ashleyknowles.com\\\/#\\\/schema\\\/person\\\/951a79ec7d4b86db384781314ee1ba49\"},\"headline\":\"Using JSON Web Tokens with CA API Gateway\",\"datePublished\":\"2019-08-12T01:04:24+00:00\",\"dateModified\":\"2019-08-12T01:04:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/ashleyknowles.com\\\/2019\\\/08\\\/12\\\/using-json-web-tokens-with-ca-api-gateway\\\/\"},\"wordCount\":459,\"commentCount\":1,\"image\":{\"@id\":\"https:\\\/\\\/ashleyknowles.com\\\/2019\\\/08\\\/12\\\/using-json-web-tokens-with-ca-api-gateway\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i2.wp.com\\\/ashleyknowles.net\\\/wp-content\\\/uploads\\\/2019\\\/08\\\/image.png?fit=640%2C141&amp;ssl=1\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/ashleyknowles.com\\\/2019\\\/08\\\/12\\\/using-json-web-tokens-with-ca-api-gateway\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/ashleyknowles.com\\\/2019\\\/08\\\/12\\\/using-json-web-tokens-with-ca-api-gateway\\\/\",\"url\":\"https:\\\/\\\/ashleyknowles.com\\\/2019\\\/08\\\/12\\\/using-json-web-tokens-with-ca-api-gateway\\\/\",\"name\":\"Using JSON Web Tokens with CA API Gateway\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ashleyknowles.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/ashleyknowles.com\\\/2019\\\/08\\\/12\\\/using-json-web-tokens-with-ca-api-gateway\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/ashleyknowles.com\\\/2019\\\/08\\\/12\\\/using-json-web-tokens-with-ca-api-gateway\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i2.wp.com\\\/ashleyknowles.net\\\/wp-content\\\/uploads\\\/2019\\\/08\\\/image.png?fit=640%2C141&amp;ssl=1\",\"datePublished\":\"2019-08-12T01:04:24+00:00\",\"dateModified\":\"2019-08-12T01:04:25+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/ashleyknowles.com\\\/#\\\/schema\\\/person\\\/951a79ec7d4b86db384781314ee1ba49\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/ashleyknowles.com\\\/2019\\\/08\\\/12\\\/using-json-web-tokens-with-ca-api-gateway\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/ashleyknowles.com\\\/2019\\\/08\\\/12\\\/using-json-web-tokens-with-ca-api-gateway\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/ashleyknowles.com\\\/2019\\\/08\\\/12\\\/using-json-web-tokens-with-ca-api-gateway\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i2.wp.com\\\/ashleyknowles.net\\\/wp-content\\\/uploads\\\/2019\\\/08\\\/image.png?fit=640%2C141&amp;ssl=1\",\"contentUrl\":\"https:\\\/\\\/i2.wp.com\\\/ashleyknowles.net\\\/wp-content\\\/uploads\\\/2019\\\/08\\\/image.png?fit=640%2C141&amp;ssl=1\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/ashleyknowles.com\\\/2019\\\/08\\\/12\\\/using-json-web-tokens-with-ca-api-gateway\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/ashleyknowles.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Using JSON Web Tokens with CA API Gateway\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/ashleyknowles.com\\\/#website\",\"url\":\"https:\\\/\\\/ashleyknowles.com\\\/\",\"name\":\"ashley knowles\",\"description\":\"Cloud Infrastructure Architect (Windows\\\/SQL Server\\\/Azure\\\/Office 365). BInfoTech, MCITP, MCSE, MBA Student and wantrepreneur\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/ashleyknowles.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/ashleyknowles.com\\\/#\\\/schema\\\/person\\\/951a79ec7d4b86db384781314ee1ba49\",\"name\":\"Ashley\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0f8204d8594bf461ec63ec22ea181bd5005c148555f07496a5c5a59f80f47b2b?s=96&d=mm&r=pg\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0f8204d8594bf461ec63ec22ea181bd5005c148555f07496a5c5a59f80f47b2b?s=96&d=mm&r=pg\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0f8204d8594bf461ec63ec22ea181bd5005c148555f07496a5c5a59f80f47b2b?s=96&d=mm&r=pg\",\"caption\":\"Ashley\"},\"sameAs\":[\"https:\\\/\\\/ashleyknowles.com\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Using JSON Web Tokens with CA API Gateway","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/ashleyknowles.com\/2019\/08\/12\/using-json-web-tokens-with-ca-api-gateway\/","og_locale":"en_US","og_type":"article","og_title":"Using JSON Web Tokens with CA API Gateway","og_description":"Over the past 3 years or so working in a software team that develops APIs\/integrations between many complex systems, we&#8217;ve seen the rise of the JSON Web Token. This humble little block of base64 encoded data is now at the core of most every API we build, and is heavily used in enforcing confidentiality and [&hellip;]","og_url":"https:\/\/ashleyknowles.com\/2019\/08\/12\/using-json-web-tokens-with-ca-api-gateway\/","og_site_name":"ashley knowles","article_publisher":"https:\/\/facebook.com\/ashleyknowles","article_published_time":"2019-08-12T01:04:24+00:00","article_modified_time":"2019-08-12T01:04:25+00:00","og_image":[{"url":"https:\/\/i2.wp.com\/ashleyknowles.net\/wp-content\/uploads\/2019\/08\/image.png?fit=640%2C141&amp;ssl=1","type":"","width":"","height":""}],"author":"Ashley","twitter_card":"summary_large_image","twitter_creator":"@ashkbne","twitter_site":"@ashkbne","twitter_misc":{"Written by":"Ashley","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ashleyknowles.com\/2019\/08\/12\/using-json-web-tokens-with-ca-api-gateway\/#article","isPartOf":{"@id":"https:\/\/ashleyknowles.com\/2019\/08\/12\/using-json-web-tokens-with-ca-api-gateway\/"},"author":{"name":"Ashley","@id":"https:\/\/ashleyknowles.com\/#\/schema\/person\/951a79ec7d4b86db384781314ee1ba49"},"headline":"Using JSON Web Tokens with CA API Gateway","datePublished":"2019-08-12T01:04:24+00:00","dateModified":"2019-08-12T01:04:25+00:00","mainEntityOfPage":{"@id":"https:\/\/ashleyknowles.com\/2019\/08\/12\/using-json-web-tokens-with-ca-api-gateway\/"},"wordCount":459,"commentCount":1,"image":{"@id":"https:\/\/ashleyknowles.com\/2019\/08\/12\/using-json-web-tokens-with-ca-api-gateway\/#primaryimage"},"thumbnailUrl":"https:\/\/i2.wp.com\/ashleyknowles.net\/wp-content\/uploads\/2019\/08\/image.png?fit=640%2C141&amp;ssl=1","inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/ashleyknowles.com\/2019\/08\/12\/using-json-web-tokens-with-ca-api-gateway\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/ashleyknowles.com\/2019\/08\/12\/using-json-web-tokens-with-ca-api-gateway\/","url":"https:\/\/ashleyknowles.com\/2019\/08\/12\/using-json-web-tokens-with-ca-api-gateway\/","name":"Using JSON Web Tokens with CA API Gateway","isPartOf":{"@id":"https:\/\/ashleyknowles.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ashleyknowles.com\/2019\/08\/12\/using-json-web-tokens-with-ca-api-gateway\/#primaryimage"},"image":{"@id":"https:\/\/ashleyknowles.com\/2019\/08\/12\/using-json-web-tokens-with-ca-api-gateway\/#primaryimage"},"thumbnailUrl":"https:\/\/i2.wp.com\/ashleyknowles.net\/wp-content\/uploads\/2019\/08\/image.png?fit=640%2C141&amp;ssl=1","datePublished":"2019-08-12T01:04:24+00:00","dateModified":"2019-08-12T01:04:25+00:00","author":{"@id":"https:\/\/ashleyknowles.com\/#\/schema\/person\/951a79ec7d4b86db384781314ee1ba49"},"breadcrumb":{"@id":"https:\/\/ashleyknowles.com\/2019\/08\/12\/using-json-web-tokens-with-ca-api-gateway\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ashleyknowles.com\/2019\/08\/12\/using-json-web-tokens-with-ca-api-gateway\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ashleyknowles.com\/2019\/08\/12\/using-json-web-tokens-with-ca-api-gateway\/#primaryimage","url":"https:\/\/i2.wp.com\/ashleyknowles.net\/wp-content\/uploads\/2019\/08\/image.png?fit=640%2C141&amp;ssl=1","contentUrl":"https:\/\/i2.wp.com\/ashleyknowles.net\/wp-content\/uploads\/2019\/08\/image.png?fit=640%2C141&amp;ssl=1"},{"@type":"BreadcrumbList","@id":"https:\/\/ashleyknowles.com\/2019\/08\/12\/using-json-web-tokens-with-ca-api-gateway\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ashleyknowles.com\/"},{"@type":"ListItem","position":2,"name":"Using JSON Web Tokens with CA API Gateway"}]},{"@type":"WebSite","@id":"https:\/\/ashleyknowles.com\/#website","url":"https:\/\/ashleyknowles.com\/","name":"ashley knowles","description":"Cloud Infrastructure Architect (Windows\/SQL Server\/Azure\/Office 365). BInfoTech, MCITP, MCSE, MBA Student and wantrepreneur","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ashleyknowles.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/ashleyknowles.com\/#\/schema\/person\/951a79ec7d4b86db384781314ee1ba49","name":"Ashley","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/0f8204d8594bf461ec63ec22ea181bd5005c148555f07496a5c5a59f80f47b2b?s=96&d=mm&r=pg","url":"https:\/\/secure.gravatar.com\/avatar\/0f8204d8594bf461ec63ec22ea181bd5005c148555f07496a5c5a59f80f47b2b?s=96&d=mm&r=pg","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0f8204d8594bf461ec63ec22ea181bd5005c148555f07496a5c5a59f80f47b2b?s=96&d=mm&r=pg","caption":"Ashley"},"sameAs":["https:\/\/ashleyknowles.com"]}]}},"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/ashleyknowles.com\/wp-json\/wp\/v2\/posts\/2946","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ashleyknowles.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ashleyknowles.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ashleyknowles.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ashleyknowles.com\/wp-json\/wp\/v2\/comments?post=2946"}],"version-history":[{"count":2,"href":"https:\/\/ashleyknowles.com\/wp-json\/wp\/v2\/posts\/2946\/revisions"}],"predecessor-version":[{"id":2954,"href":"https:\/\/ashleyknowles.com\/wp-json\/wp\/v2\/posts\/2946\/revisions\/2954"}],"wp:attachment":[{"href":"https:\/\/ashleyknowles.com\/wp-json\/wp\/v2\/media?parent=2946"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ashleyknowles.com\/wp-json\/wp\/v2\/categories?post=2946"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ashleyknowles.com\/wp-json\/wp\/v2\/tags?post=2946"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}