{
    "componentChunkName": "component---src-templates-blog-post-js",
    "path": "/2020/02/02/centralized-configuration-management-using-azure-app-configuration-setting-up-offline-caching/",
    "result": {"data":{"site":{"siteMetadata":{"title":"K2V Academy"}},"markdownRemark":{"id":"094dd0f1-ea9b-5b0a-ad00-f3d1c403731d","fields":{"slug":"/2020/02/02/centralized-configuration-management-using-azure-app-configuration-setting-up-offline-caching/","readingTime":{"text":"2 min read"}},"html":"<h3>Centralized Configuration Management using Azure App Configuration Series</h3>\n<ul>\n<li><a href=\"https://k2vacademy.com/2019/10/centralized-configuration-management-for-the-cloud-with-azure-app-configuration/\" target=\"_blank\" rel=\"noreferrer\">Introduction</a></li>\n<li><a href=\"https://k2vacademy.com/2020/01/centralized-configuration-management-using-azure-app-configuration-using-managed-identities-to-access-azure-app-configuration/\" target=\"_blank\" rel=\"noreferrer\">Using Managed Identities to Access Azure App Configuration</a></li>\n<li><a href=\"https://k2vacademy.com/2020/02/centralized-configuration-management-using-azure-app-configuration-setting-up-dynamic-refresh-for-configuration-values/\" target=\"_blank\" rel=\"noreferrer\">Setting Up Dynamic Refresh for Configuration Values</a></li>\n<li>Setting Up Offline Caching (This Article)</li>\n<li><a href=\"https://k2vacademy.com/2020/02/centralized-configuration-management-using-azure-app-configuration-implementing-custom-offline-cache/\" target=\"_blank\" rel=\"noreferrer\">Implementing Custom Offline Cache</a></li>\n<li><a href=\"https://k2vacademy.com/2020/02/centralized-configuration-management-using-azure-app-configuration-using-azure-key-vault-side-by-side/\" target=\"_blank\" rel=\"noreferrer\">Using Azure Key Vault Side-by-Side</a></li>\n<li><a href=\"https://k2vacademy.com/2020/02/centralized-configuration-management-using-azure-app-configuration-local-debugging-when-using-managed-identities-to-access-azure-app-configuration/\" target=\"_blank\" rel=\"noreferrer\">Local Debugging When Using Managed Identities to Access Azure App Configuration</a></li>\n</ul>\n<p>In the previous article we talked about how we can configure <a href=\"https://k2vacademy.com/2020/02/centralized-configuration-management-using-azure-app-configuration-setting-up-dynamic-refresh-for-configuration-values/\" target=\"_blank\" rel=\"noreferrer\">Dynamic Configuration Refresh for Azure App Configuration</a>. In this article we’ll look at how you can configure offline caching for Azure App Configuration.</p>\n<p>Setting up Offline Caching for App Configuration is pretty easy. You need to have an implementation of <strong><code>IOfflineCache</code></strong> interface and out of the box there is an <strong><code>OfflineFileCache</code></strong> implementation provided to you. All you need to do is configure this offline cache implementation in the <strong>Program.cs</strong> file.</p>\n<!-- `gist:kasunkv/074bf6077805f29bb26f0882ed26bbbf#Program.cs` -->\n<div class=\"gatsby-highlight\" data-language=\"cs\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-cs line-numbers\"><code class=\"language-cs\"><span class=\"token keyword\">using</span> <span class=\"token namespace\">Azure<span class=\"token punctuation\">.</span>Identity</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">using</span> <span class=\"token namespace\">Microsoft<span class=\"token punctuation\">.</span>Extensions<span class=\"token punctuation\">.</span>Configuration<span class=\"token punctuation\">.</span>AzureAppConfiguration</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">namespace</span> <span class=\"token namespace\">MusicStore<span class=\"token punctuation\">.</span>Web</span>\n<span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Program</span>\n  <span class=\"token punctuation\">{</span>\n    <span class=\"token range operator\">..</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token return-type class-name\">IHostBuilder</span> <span class=\"token function\">CreateHostBuilder</span><span class=\"token punctuation\">(</span><span class=\"token class-name\"><span class=\"token keyword\">string</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span></span> args<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span>\n      Host<span class=\"token punctuation\">.</span><span class=\"token function\">CreateDefaultBuilder</span><span class=\"token punctuation\">(</span>args<span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">.</span><span class=\"token function\">ConfigureWebHostDefaults</span><span class=\"token punctuation\">(</span>webBuilder <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n          webBuilder<span class=\"token punctuation\">.</span><span class=\"token generic-method\"><span class=\"token function\">UseStartup</span><span class=\"token generic class-name\"><span class=\"token punctuation\">&lt;</span>Startup<span class=\"token punctuation\">></span></span></span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">.</span><span class=\"token function\">ConfigureAppConfiguration</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>context<span class=\"token punctuation\">,</span> config<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n          <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> settings <span class=\"token operator\">=</span> config<span class=\"token punctuation\">.</span><span class=\"token function\">Build</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> appConfigEndpoint <span class=\"token operator\">=</span> settings<span class=\"token punctuation\">[</span><span class=\"token string\">\"AppSettings:AppConfiguration:Endpoint\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n          <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> userAssignedIdentityClientId <span class=\"token operator\">=</span> settings<span class=\"token punctuation\">[</span><span class=\"token string\">\"AppSettings:Identity:ClientId\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n          <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span><span class=\"token keyword\">string</span><span class=\"token punctuation\">.</span><span class=\"token function\">IsNullOrEmpty</span><span class=\"token punctuation\">(</span>appConfigEndpoint<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n          <span class=\"token punctuation\">{</span>\n            <span class=\"token class-name\"><span class=\"token keyword\">var</span></span> endpoint <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Uri</span><span class=\"token punctuation\">(</span>appConfigEndpoint<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n            config<span class=\"token punctuation\">.</span><span class=\"token function\">AddAzureAppConfiguration</span><span class=\"token punctuation\">(</span>options <span class=\"token operator\">=></span>\n            <span class=\"token punctuation\">{</span>\n              options\n                <span class=\"token comment\">// Use managed identity to access app configuration</span>\n                <span class=\"token punctuation\">.</span><span class=\"token function\">Connect</span><span class=\"token punctuation\">(</span>endpoint<span class=\"token punctuation\">,</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">ManagedIdentityCredential</span><span class=\"token punctuation\">(</span><span class=\"token named-parameter punctuation\">clientId</span><span class=\"token punctuation\">:</span> userAssignedIdentityClientId<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\n                <span class=\"token comment\">// Setup dynamic refresh</span>\n                <span class=\"token punctuation\">.</span><span class=\"token function\">ConfigureRefresh</span><span class=\"token punctuation\">(</span>refreshOpt <span class=\"token operator\">=></span>\n                <span class=\"token punctuation\">{</span>\n                    refreshOpt<span class=\"token punctuation\">.</span><span class=\"token function\">Register</span><span class=\"token punctuation\">(</span><span class=\"token named-parameter punctuation\">key</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"AppSettings:Version\"</span><span class=\"token punctuation\">,</span> <span class=\"token named-parameter punctuation\">refreshAll</span><span class=\"token punctuation\">:</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">,</span> <span class=\"token named-parameter punctuation\">label</span><span class=\"token punctuation\">:</span> LabelFilter<span class=\"token punctuation\">.</span>Null<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                    refreshOpt<span class=\"token punctuation\">.</span><span class=\"token function\">SetCacheExpiration</span><span class=\"token punctuation\">(</span>TimeSpan<span class=\"token punctuation\">.</span><span class=\"token function\">FromSeconds</span><span class=\"token punctuation\">(</span><span class=\"token number\">10</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n\n                <span class=\"token comment\">// Setup offline cache</span>\n                <span class=\"token punctuation\">.</span><span class=\"token function\">SetOfflineCache</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">OfflineFileCache</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n                <span class=\"token punctuation\">.</span><span class=\"token function\">UseFeatureFlags</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          <span class=\"token punctuation\">}</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre></div>\n<p>All you need to do is to use the <strong><code>SetOfflineCache()</code></strong> method in the <strong><code>AzureAppConfigurationOptions</code></strong> and supply the method with an implementation of <strong><code>IOfflineCache</code></strong> interface. The <strong><code>OfflineFileCache</code></strong> implementation uses the local file system to cache the app configuration and supports the encryption of the stored data.</p>\n<p>When you configure Offline caching, every time App Configuration tries to fetch the configuration from Azure, it will check the cache and if it’s expired fetch the values from Azure and update the local cache.</p>\n<h2>Summary</h2>\n<p>In this short article we looked at how we can configure offline caching for App Configuration using the built in <strong><code>OfflineFileCache</code></strong> implementation that uses the local file system. The source code for this example is available in the Azure App Configuration Offline Cache Example GitHub repository. In the next article we’ll look at how we can create our own caching implementation for offline caching.</p>","frontmatter":{"title":"Centralized Configuration Management using Azure App Configuration: Setting Up Offline Caching","date":"February 02, 2020","originalDate":"2020-02-02","categories":[".Net Core","ASP.Net Core","Azure","App Configuration","Cloud","Development","Microsoft"],"author":{"id":"kasun-kodagoda","name":"Kasun Kodagoda","description":"Kasun Kodagoda is a Senior Technical Lead at 99X working on the Microsoft stack. He is an Azure Cloud and Azure DevOps enthusiasts and contributes to few Open Source projects on GitHub, mainly focusing on Azure Pipelines Extensions. OWASP ZAP Scan, Slack Notification task are some of his popular Azure DevOps extension. Kasun is also a blogger, occasional gamer and creates YouTube videos on Azure, Azure DevOps and Gaming and loves creating Architectural and Interior Design visualizations when he finds time.","profile":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","placeholder":{"fallback":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAIAAAAC64paAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEtUlEQVQ4ywXB+U9aBwAA4PdfbGmypNlhllarVao4kPt+8OA9eJxKRQWlggeoqEWEYvFCi3hwC4hCRaqAnUhhgthj2mt2R5y1y5ol+3F/w74PCG6FQsmNxMZyKRPOl46KJ8+Lx+V8pXJcLp3mkhc/rh/veAsR7242Hk6uj42OGA0GywPLesIXjK4Ang2/wzkbcowXoq78UfGgVH5WPnpaONwOBTJBZyHuW3I5Q4/DqVxiPe4bHzcNGQyj98fWYh5/1A3MLy8OGgybQWtsy3vwUyFXOg5vRmVyWX0Dpr7uFggyZ+bntvcf7+xvxp9EbXZLn14/OzuZSvu8oUeAfcYeWrMU912BsDdXyEViESqFePPb6wwcho3H1FZ93dTU5A2tpNLRnb2Iw2HR9nQvzo4WD1a9vllAPzC8Hbb+eboaDC4d5jPaHhVCbtx19JeDzrJvLmnTkxtva3WaTDa6kwrOTlu03erxMeN6YD7ofQj09A64F0f+u1g+PfLkniZkQlZoWH6+MXe2FXgRC5Rd5iERGYI42WwsmfRPTIxo1F0262gk6Ays2gHz2JCqq6uSsXx6tXBaio3qZMF+wTv/5G/J0NtNz7O5IXs7GyI1et3WzY0F42BvX2+3Z8Wx5p5yL0wAq677MkVbZ0ere85Qzoft/RK3lrWkhVe1yGIHT0a+0ycgjMo49wfU2eSU1aw3Dmj24vadiDkVMQMnadPiuHp15t6LffP7sts3LnVpGP0i6nQnsmVS+Uf78/Mji1qJAoWPn+j8j/qMetWvh4O/PNW9TWuARb10y9T2IqZ9nbx3njGVwqY9i+I8aDtaGC4/Gn48oYubOqc1YOddZGFSnvKpWxXyQlRzluyqxNqBuBVJ2KX5tbbfE5JXGz2VbadLB7nVPIeKNyKkm+T8YSG1D23x2aTloDi9JDRqJAcrknJAWPTwgUJmJZtc2016DtPLB6mVnyt7LltvNxMz1Q46NQpbO6rjk2nYGw+MaDrmeF0OnVWS56fJdy8TZydx4NNfHz5evb+8PLu6evP58/uT5/vdahm9/jsFuU5MwTKbbpPu1Ehl8i+vfYUjUFVqzfScI74deXlavLh8A/xzWfr3qvz3RSmXjU7ZhllsVnV1dZsMNQ324hobrl/7YmrGpR+2VddibtbU1dzC4Il0AonK4nCVSjlQ8Cq9k2J9J8yik4kkGvYHMpFEhQTiPz5+jm/vEihM30ZK0dnXTGSR6Fw8kcYEkRYSA0/m1NY3A6pWGI/HUagUHk/A5YvpTIgFwi1ESmIns+aP3mpoHrFMowo1kcajMiAChcMARRQ6F0/h3m5oBoRCAZ8PIyIJIpKDEMriCPjCNhKVY7Y+fPvhgsbkovIOGL3LBEUMECHSuCxITAeFd3C02gYswGAwIVjKFUggYSuMtvH4Ii6soLERdY9+b/+QQGE1YEkMjkggUrIhKZ7MYfFlBBr3Zl0TBtsC0GgMJgdhgiIuLBOKlQiq5PClTJ4EQVvd3hBP2Eqm80FYAYmUNA6KI7IZXDEGS6q6UYfFUwE2KCBS2EQqF4KlMKqEJR2gQM6GpBxIbDJPQWg7hSngIq0svpzCQnBEdhOOVvV9zTdV1Y0/kP8Hsucu/18URfsAAAAASUVORK5CYII="},"images":{"fallback":{"src":"/static/b06d893ba176e32c97ea1f1a58bfff43/b5a32/kasun-kodagoda.png","srcSet":"/static/b06d893ba176e32c97ea1f1a58bfff43/ca121/kasun-kodagoda.png 20w,\n/static/b06d893ba176e32c97ea1f1a58bfff43/b5941/kasun-kodagoda.png 39w,\n/static/b06d893ba176e32c97ea1f1a58bfff43/b5a32/kasun-kodagoda.png 78w,\n/static/b06d893ba176e32c97ea1f1a58bfff43/d8a72/kasun-kodagoda.png 156w","sizes":"(min-width: 78px) 78px, 100vw"},"sources":[{"srcSet":"/static/b06d893ba176e32c97ea1f1a58bfff43/264f2/kasun-kodagoda.webp 20w,\n/static/b06d893ba176e32c97ea1f1a58bfff43/72e27/kasun-kodagoda.webp 39w,\n/static/b06d893ba176e32c97ea1f1a58bfff43/7a63e/kasun-kodagoda.webp 78w,\n/static/b06d893ba176e32c97ea1f1a58bfff43/d1e3d/kasun-kodagoda.webp 156w","type":"image/webp","sizes":"(min-width: 78px) 78px, 100vw"}]},"width":78,"height":78}}},"socials":{"facebook":"https://www.facebook.com/kasun.kodagoda","github":"https://github.com/kasunkv","twitter":"https://twitter.com/kasun_kodagoda","linkedin":"https://www.linkedin.com/in/kasunkodagoda","website":"https://kasunkodagoda.com"}},"description":"Easily configure Offline Caching for Azure App Configuration so you can reduce the calls to Azure for fetching app configuration which will increase the performance.","tags":["Azure","App Configuration","Offline Cache",".Net Core","ASP.Net Core","Cloud","Development","Microsoft"],"image":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","placeholder":{"fallback":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAKABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAQFAv/EABUBAQEAAAAAAAAAAAAAAAAAAAAB/9oADAMBAAIQAxAAAAFmNdm2Imw//8QAHRAAAQIHAAAAAAAAAAAAAAAAAgABAwQQEiExMv/aAAgBAQABBQI4FjUm+Byi3//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABoQAAICAwAAAAAAAAAAAAAAAAEQAAITIUH/2gAIAQEABj8COOvGJtf/xAAbEAEAAwEAAwAAAAAAAAAAAAABABEhQTFRcf/aAAgBAQABPyHFCKHrETEpOMp9RIIus8hr7BTqf//aAAwDAQACAAMAAAAQhB//xAAVEQEBAAAAAAAAAAAAAAAAAAAAEf/aAAgBAwEBPxBX/8QAFhEBAQEAAAAAAAAAAAAAAAAAAAER/9oACAECAQE/EGR//8QAGxABAAIDAQEAAAAAAAAAAAAAAQAhETGRQXH/2gAIAQEAAT8QLK0lVa+xp0g0PGOdyuQbAtB3UpoTy0AYAHRP/9k="},"images":{"fallback":{"src":"/static/0e5be87f4a702232de79fc1632f0fbe4/333cc/featured.jpg","srcSet":"/static/0e5be87f4a702232de79fc1632f0fbe4/fd1a3/featured.jpg 300w,\n/static/0e5be87f4a702232de79fc1632f0fbe4/c5f00/featured.jpg 600w,\n/static/0e5be87f4a702232de79fc1632f0fbe4/333cc/featured.jpg 1200w","sizes":"(min-width: 1200px) 1200px, 100vw"},"sources":[{"srcSet":"/static/0e5be87f4a702232de79fc1632f0fbe4/7987b/featured.webp 300w,\n/static/0e5be87f4a702232de79fc1632f0fbe4/8a009/featured.webp 600w,\n/static/0e5be87f4a702232de79fc1632f0fbe4/c06d5/featured.webp 1200w","type":"image/webp","sizes":"(min-width: 1200px) 1200px, 100vw"}]},"width":1200,"height":576},"resize":{"src":"/static/0e5be87f4a702232de79fc1632f0fbe4/47498/featured.jpg","height":576,"width":1200}}}}},"previous":{"fields":{"slug":"/2020/02/02/centralized-configuration-management-using-azure-app-configuration-setting-up-dynamic-refresh-for-configuration-values/"},"frontmatter":{"title":"Centralized Configuration Management using Azure App Configuration: Setting Up Dynamic Refresh for Configuration Values","date":"February 02, 2020","image":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","placeholder":{"fallback":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAKABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAEEAgP/xAAVAQEBAAAAAAAAAAAAAAAAAAABAP/aAAwDAQACEAMQAAABdFiLgaB//8QAGRAAAgMBAAAAAAAAAAAAAAAAAgMBEBIE/9oACAEBAAEFAn822AuQDNTX/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAGRAAAgMBAAAAAAAAAAAAAAAAAREAEiBx/9oACAEBAAY/ArBmANcz/8QAGxAAAwACAwAAAAAAAAAAAAAAAAERITEQQYH/2gAIAQEAAT8hnZDDVEtSHQ06d940Hs//2gAMAwEAAgADAAAAEKcP/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPxA//8QAFREBAQAAAAAAAAAAAAAAAAAAEEH/2gAIAQIBAT8Qh//EABwQAQACAgMBAAAAAAAAAAAAAAEAESExQVFhkf/aAAgBAQABPxBidACAK5V1CbjINldW/b8gHIe4NwFsQnCf/9k="},"images":{"fallback":{"src":"/static/899d5dd2ed4566cf4380a6a4f84e12c4/c5f00/featured.jpg","srcSet":"/static/899d5dd2ed4566cf4380a6a4f84e12c4/caff5/featured.jpg 150w,\n/static/899d5dd2ed4566cf4380a6a4f84e12c4/fd1a3/featured.jpg 300w,\n/static/899d5dd2ed4566cf4380a6a4f84e12c4/c5f00/featured.jpg 600w,\n/static/899d5dd2ed4566cf4380a6a4f84e12c4/333cc/featured.jpg 1200w","sizes":"(min-width: 600px) 600px, 100vw"},"sources":[{"srcSet":"/static/899d5dd2ed4566cf4380a6a4f84e12c4/78240/featured.webp 150w,\n/static/899d5dd2ed4566cf4380a6a4f84e12c4/7987b/featured.webp 300w,\n/static/899d5dd2ed4566cf4380a6a4f84e12c4/8a009/featured.webp 600w,\n/static/899d5dd2ed4566cf4380a6a4f84e12c4/c06d5/featured.webp 1200w","type":"image/webp","sizes":"(min-width: 600px) 600px, 100vw"}]},"width":600,"height":288}}}}},"next":{"fields":{"slug":"/2020/02/03/centralized-configuration-management-using-azure-app-configuration-using-azure-key-vault-side-by-side/"},"frontmatter":{"title":"Centralized Configuration Management using Azure App Configuration: Using Azure Key Vault Side-by-Side","date":"February 03, 2020","image":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","placeholder":{"fallback":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAKABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAMEBf/EABUBAQEAAAAAAAAAAAAAAAAAAAAB/9oADAMBAAIQAxAAAAFkS6o0BxX/xAAaEAACAgMAAAAAAAAAAAAAAAABAgADBCMy/9oACAEBAAEFAq7NRYsa0KpMXuf/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAVEQEBAAAAAAAAAAAAAAAAAAABEP/aAAgBAgEBPwEn/8QAGxAAAgIDAQAAAAAAAAAAAAAAAAERcRBRgpH/2gAIAQEABj8Cl0bbIbfpyOsf/8QAHRAAAgIBBQAAAAAAAAAAAAAAAAERIRAxQWGRsf/aAAgBAQABPyGeVa0ckRWyrxCwyYVdhMT/2gAMAwEAAgADAAAAEAvP/8QAFREBAQAAAAAAAAAAAAAAAAAAEBH/2gAIAQMBAT8Qh//EABYRAQEBAAAAAAAAAAAAAAAAAAEQEf/aAAgBAgEBPxBaT//EAB0QAQACAgIDAAAAAAAAAAAAAAEAESExQWFRwfD/2gAIAQEAAT8QGgUh2Wt/dEuwts8vRNiutKjomwMDcHOSEqgpg+My8E//2Q=="},"images":{"fallback":{"src":"/static/0b75b5257b68cbc95905c3b70032edb0/c5f00/featured.jpg","srcSet":"/static/0b75b5257b68cbc95905c3b70032edb0/caff5/featured.jpg 150w,\n/static/0b75b5257b68cbc95905c3b70032edb0/fd1a3/featured.jpg 300w,\n/static/0b75b5257b68cbc95905c3b70032edb0/c5f00/featured.jpg 600w,\n/static/0b75b5257b68cbc95905c3b70032edb0/333cc/featured.jpg 1200w","sizes":"(min-width: 600px) 600px, 100vw"},"sources":[{"srcSet":"/static/0b75b5257b68cbc95905c3b70032edb0/78240/featured.webp 150w,\n/static/0b75b5257b68cbc95905c3b70032edb0/7987b/featured.webp 300w,\n/static/0b75b5257b68cbc95905c3b70032edb0/8a009/featured.webp 600w,\n/static/0b75b5257b68cbc95905c3b70032edb0/c06d5/featured.webp 1200w","type":"image/webp","sizes":"(min-width: 600px) 600px, 100vw"}]},"width":600,"height":288}}}}},"sidebarData":{"tags":[{"tag":".Net Core","totalCount":13},{"tag":"ARM","totalCount":2},{"tag":"ASP.Net Core","totalCount":17},{"tag":"AVD","totalCount":2},{"tag":"Active Directory","totalCount":7},{"tag":"Android","totalCount":2},{"tag":"Android Emulator","totalCount":1},{"tag":"Angular.JS","totalCount":3},{"tag":"Animation","totalCount":3},{"tag":"Api Management","totalCount":1},{"tag":"App Configuration","totalCount":14},{"tag":"App Service","totalCount":9},{"tag":"Application Insights","totalCount":1},{"tag":"Aurelia","totalCount":7},{"tag":"Automation","totalCount":1},{"tag":"AzSK","totalCount":3},{"tag":"Azure","totalCount":48},{"tag":"Azure Automation","totalCount":1},{"tag":"Azure CLI","totalCount":2},{"tag":"Azure DevOps","totalCount":16},{"tag":"Azure DevOps Extensions","totalCount":2},{"tag":"Azure Functions","totalCount":8},{"tag":"Azure Pipelines","totalCount":2},{"tag":"Azure Policy","totalCount":1},{"tag":"Azure Resource Manager","totalCount":4},{"tag":"Azure Resource Providers","totalCount":1},{"tag":"Azure Security","totalCount":2},{"tag":"Azure Subscription","totalCount":1},{"tag":"Branching Strategy","totalCount":2},{"tag":"Build Tasks","totalCount":1},{"tag":"C#","totalCount":9},{"tag":"CMS","totalCount":1},{"tag":"Certificates","totalCount":1},{"tag":"Chrome","totalCount":1},{"tag":"Cloud","totalCount":24},{"tag":"Cloud Patterns","totalCount":1},{"tag":"Cloud Security","totalCount":2},{"tag":"Code Quality","totalCount":2},{"tag":"Compliance","totalCount":1},{"tag":"Configuration Management","totalCount":2},{"tag":"Continuous Delivery","totalCount":3},{"tag":"Continuous Deployment","totalCount":1},{"tag":"Continuous Integration","totalCount":2},{"tag":"Counter Expressions","totalCount":1},{"tag":"Custom Controls","totalCount":3},{"tag":"Custom Extensions","totalCount":1},{"tag":"DNS","totalCount":1},{"tag":"Debugging","totalCount":1},{"tag":"Dependency Injection","totalCount":4},{"tag":"DevOps","totalCount":23},{"tag":"Development","totalCount":33},{"tag":"Documentation","totalCount":1},{"tag":"Dynamic Refresh","totalCount":1},{"tag":"Emulator","totalCount":3},{"tag":"End-to-End Testing","totalCount":1},{"tag":"Error Tracking","totalCount":1},{"tag":"Extensions","totalCount":2},{"tag":"Feature Flags","totalCount":7},{"tag":"Feature Management","totalCount":13},{"tag":"Federated Identity","totalCount":1},{"tag":"FireFox OS","totalCount":1},{"tag":"Git","totalCount":4},{"tag":"GitFlow","totalCount":2},{"tag":"GitHub","totalCount":3},{"tag":"Google","totalCount":1},{"tag":"Google Maps","totalCount":2},{"tag":"Governance","totalCount":1},{"tag":"HAXM","totalCount":2},{"tag":"Hypervisor","totalCount":1},{"tag":"IaaS","totalCount":1},{"tag":"Implicit Typing","totalCount":1},{"tag":"JSON Templates","totalCount":1},{"tag":"JavaScript","totalCount":11},{"tag":"Joomla","totalCount":1},{"tag":"Key Rotation","totalCount":1},{"tag":"Key Vault","totalCount":8},{"tag":"Late Binding","totalCount":1},{"tag":"Localization","totalCount":1},{"tag":"Managed Identity","totalCount":8},{"tag":"Marketing","totalCount":1},{"tag":"Microsoft","totalCount":16},{"tag":"Monitoring","totalCount":1},{"tag":"NPM","totalCount":1},{"tag":"Networking","totalCount":1},{"tag":"NuGet","totalCount":1},{"tag":"OWASP","totalCount":4},{"tag":"OWASP ZAP","totalCount":4},{"tag":"Offline Cache","totalCount":2},{"tag":"Online Presence","totalCount":1},{"tag":"OpenSSL","totalCount":1},{"tag":"OpenSource","totalCount":1},{"tag":"PHP","totalCount":1},{"tag":"PaaS","totalCount":1},{"tag":"Personal Development","totalCount":1},{"tag":"PhpStorm","totalCount":1},{"tag":"PowerShell","totalCount":3},{"tag":"Premium Hosting","totalCount":1},{"tag":"Protractor","totalCount":1},{"tag":"Pull Requests","totalCount":1},{"tag":"Release Pipeline","totalCount":1},{"tag":"SEO","totalCount":1},{"tag":"SPA","totalCount":8},{"tag":"SQL Server","totalCount":2},{"tag":"Security","totalCount":17},{"tag":"Security Center","totalCount":1},{"tag":"Security Testing","totalCount":4},{"tag":"Sentry","totalCount":1},{"tag":"Serverless","totalCount":6},{"tag":"Service Bus","totalCount":1},{"tag":"Sharpen Your C#","totalCount":3},{"tag":"SonarQube","totalCount":2},{"tag":"Testing","totalCount":6},{"tag":"Tips & Tricks","totalCount":10},{"tag":"Tracking Branches","totalCount":1},{"tag":"USB Disks","totalCount":1},{"tag":"VSTS","totalCount":1},{"tag":"VT-X","totalCount":1},{"tag":"Validation","totalCount":1},{"tag":"Version Control","totalCount":3},{"tag":"Virtual Machines","totalCount":4},{"tag":"Visual Studio","totalCount":6},{"tag":"Visual Studio Code","totalCount":1},{"tag":"Visual Studio Team Services","totalCount":1},{"tag":"Wiki","totalCount":1},{"tag":"Windows","totalCount":1},{"tag":"Windows Phone","totalCount":5},{"tag":"XAML","totalCount":3},{"tag":"XDebug","totalCount":1}],"categories":[{"category":".Net Core","totalCount":20},{"category":"ASP.Net Core","totalCount":21},{"category":"Active Directory","totalCount":8},{"category":"Android","totalCount":2},{"category":"Angular.JS","totalCount":3},{"category":"Animation","totalCount":3},{"category":"Api Management","totalCount":1},{"category":"App Configuration","totalCount":14},{"category":"App Service","totalCount":15},{"category":"Application Insights","totalCount":1},{"category":"Aurelia","totalCount":7},{"category":"AzSK","totalCount":3},{"category":"Azure","totalCount":49},{"category":"Azure CLI","totalCount":3},{"category":"Azure DevOps","totalCount":19},{"category":"Azure DevOps Extensions","totalCount":3},{"category":"Azure Functions","totalCount":7},{"category":"Azure Pipelines","totalCount":2},{"category":"Azure Policy","totalCount":1},{"category":"Azure Resource Manager","totalCount":2},{"category":"Azure Subscription","totalCount":1},{"category":"C#","totalCount":15},{"category":"CMS","totalCount":1},{"category":"Chrome","totalCount":1},{"category":"Cloud","totalCount":41},{"category":"Cloud Patterns","totalCount":1},{"category":"Code Quality","totalCount":3},{"category":"Compliance","totalCount":1},{"category":"Configuration Management","totalCount":2},{"category":"Continuous Delivery","totalCount":6},{"category":"Custom Controls","totalCount":3},{"category":"DNS","totalCount":1},{"category":"Debugging","totalCount":1},{"category":"Dependency Injection","totalCount":4},{"category":"Design Patterns","totalCount":1},{"category":"DevOps","totalCount":29},{"category":"Development","totalCount":77},{"category":"Emulator","totalCount":2},{"category":"End-to-End Testing","totalCount":1},{"category":"Extension Development","totalCount":1},{"category":"Feature Flags","totalCount":7},{"category":"Feature Management","totalCount":7},{"category":"FireFox OS","totalCount":1},{"category":"Git","totalCount":5},{"category":"Git Workflows","totalCount":3},{"category":"GitHub","totalCount":6},{"category":"Google","totalCount":1},{"category":"Google Maps","totalCount":2},{"category":"Governance","totalCount":1},{"category":"IDE","totalCount":1},{"category":"IaaS","totalCount":1},{"category":"Identity","totalCount":2},{"category":"JavaScript","totalCount":11},{"category":"Joomla","totalCount":1},{"category":"Key Rotation","totalCount":1},{"category":"Key Vault","totalCount":8},{"category":"Localization","totalCount":1},{"category":"Managed Identity","totalCount":6},{"category":"Marketing","totalCount":1},{"category":"Microsoft","totalCount":43},{"category":"Networking","totalCount":1},{"category":"OWASP","totalCount":3},{"category":"Online Presence","totalCount":1},{"category":"PHP","totalCount":1},{"category":"PaaS","totalCount":6},{"category":"Personal Development","totalCount":1},{"category":"Protractor","totalCount":1},{"category":"SPA","totalCount":1},{"category":"SSL","totalCount":1},{"category":"Security","totalCount":21},{"category":"Security Center","totalCount":1},{"category":"Serverless","totalCount":6},{"category":"Sharpen Your C#","totalCount":3},{"category":"Single Page Applications","totalCount":8},{"category":"Social Media","totalCount":1},{"category":"SonarQube","totalCount":2},{"category":"Testing","totalCount":3},{"category":"Tips & Tricks","totalCount":12},{"category":"Virtual Machines","totalCount":7},{"category":"Visual Studio","totalCount":11},{"category":"Visual Studio Code","totalCount":2},{"category":"Visual Studio Team Services","totalCount":1},{"category":"Windows Phone","totalCount":5},{"category":"XAML","totalCount":3}],"archives":[{"archive":"2014","totalCount":14},{"archive":"2015","totalCount":2},{"archive":"2016","totalCount":10},{"archive":"2017","totalCount":23},{"archive":"2018","totalCount":14},{"archive":"2019","totalCount":16},{"archive":"2020","totalCount":13}]}},"pageContext":{"id":"094dd0f1-ea9b-5b0a-ad00-f3d1c403731d","previousPostId":"563bd513-1dfd-54da-af84-525dc9ae0fe9","nextPostId":"297e48e6-26ba-5eca-8350-d41f00b300bc"}},
    "staticQueryHashes": ["4067043902"]}