{"id":989,"date":"2018-12-18T11:34:16","date_gmt":"2018-12-18T11:34:16","guid":{"rendered":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/?p=989"},"modified":"2018-12-18T12:27:56","modified_gmt":"2018-12-18T12:27:56","slug":"como-configurar-nuestro-identity-server-y-nuestras-aplicaciones-web-detras-de-un-load-balancer-o-un-api-gateway","status":"publish","type":"post","link":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-configurar-nuestro-identity-server-y-nuestras-aplicaciones-web-detras-de-un-load-balancer-o-un-api-gateway\/","title":{"rendered":"C\u00f3mo configurar nuestro Identity Server (y nuestras aplicaciones web) detr\u00e1s de un Load Balancer o un Api Gateway"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-993\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/12\/C\u00f3mo-configurar-nuestro-Identity-Server-2.png.jpg\" alt=\"\" width=\"1133\" height=\"802\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/12\/C\u00f3mo-configurar-nuestro-Identity-Server-2.png.jpg 1133w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/12\/C\u00f3mo-configurar-nuestro-Identity-Server-2.png-300x212.jpg 300w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/12\/C\u00f3mo-configurar-nuestro-Identity-Server-2.png-768x544.jpg 768w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/12\/C\u00f3mo-configurar-nuestro-Identity-Server-2.png-1024x725.jpg 1024w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/12\/C\u00f3mo-configurar-nuestro-Identity-Server-2.png-610x432.jpg 610w\" sizes=\"auto, (max-width: 1133px) 100vw, 1133px\" \/>Hoy en d\u00eda, lo normal en un despliegue en Producci\u00f3n, es que se disponga de un balanceador de carga o un api proxy que act\u00faen como punto de entrada de las peticiones recibidas y se encarguen de enrutar dichas solicitudes a nuestras aplicaciones web. En este art\u00edculo veremos c\u00f3mo configurar nuestro Identity Server (y nuestras aplicaciones web) para que est\u00e9n preparadas en ese entorno, y tambi\u00e9n veremos c\u00f3mo configurar SSL Offload (requerido en muchas infraestructuras).<\/p>\n<p><!--more--><\/p>\n<h2>Vamos al l\u00edo<\/h2>\n<p>Para empezar, tenemos que configurar el servicio de Identity Server a trav\u00e9s de clase IdentityServerOptions en nuestro m\u00e9todo ConfigureServices.<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\nservices.AddIdentityServer(options =&gt;\r\n\t\t{ \r\n\t\t\toptions.PublicOrigin = &quot;https:\/\/myurl.loadbalancer.com&quot;;\r\n\t\t\toptions.IssuerUri = &quot;https:\/\/myurl.loadbalancer.com&quot;;\r\n\t\t})\r\n\t\t.AddOperationalStore(options =&gt;;\r\n                              options.ConfigureDbContext = builder =&gt; builder.UseSqlServer(connectionString, sqlOptions =&gt; sqlOptions.MigrationsAssembly(migrationsAssembly)))\r\n\t\t.AddConfigurationStore(options =&gt;\r\n                              options.ConfigureDbContext = builder =&gt; builder.UseSqlServer(connectionString, sqlOptions =&gt; sqlOptions.MigrationsAssembly(migrationsAssembly)))\r\n\t\t.AddAspNetIdentity&lt;ApplicationUser&gt;()\r\n\t\t.AddDeveloperSigningCredential();\r\n\r\n<\/pre>\n<p>Veamos en detalle las dos opciones que hemos establecido:<\/p>\n<p><strong>IssuerUri<\/strong><\/p>\n<ul>\n<li>Es el nombre \u00fanico de nuestra instancia de Identity Server. Por defecto la URL base se toma del servidor donde se encuentre instalado.<\/li>\n<\/ul>\n<p><strong>PublicOrigin<\/strong><\/p>\n<ul>\n<li>Por defecto, Identity Server emplea el host, el protocolo y el puerto de la petici\u00f3n HTTP para generar los enlaces del documento de configuraci\u00f3n de OpenId (esto es importante tenerlo en cuenta para los puntos siguientes). En un escenario en el que Identity Server se encuentra detr\u00e1s de un balanceador de carga o un api Gateway, provoca que no sea correcto. Para ello se puede sobrescribir el origen utilizado para la generaci\u00f3n de enlaces usando esta propiedad.<\/li>\n<\/ul>\n<p>Con \u00e9sto, si iniciamos nuestro Identity Server y nos posicionamos en la siguiente <strong>URL\/ .well-known\/openid-configuration<\/strong>, se mostrar\u00e1 la nueva configuraci\u00f3n.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-991\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/12\/C\u00f3mo-configurar-nuestro-Identity-Server.png\" alt=\"\" width=\"858\" height=\"391\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/12\/C\u00f3mo-configurar-nuestro-Identity-Server.png 858w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/12\/C\u00f3mo-configurar-nuestro-Identity-Server-300x137.png 300w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/12\/C\u00f3mo-configurar-nuestro-Identity-Server-768x350.png 768w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/12\/C\u00f3mo-configurar-nuestro-Identity-Server-610x278.png 610w\" sizes=\"auto, (max-width: 858px) 100vw, 858px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Como se puede observar, tanto el <strong>issuer<\/strong> como las URLs de los endpoints expuestos por Identity Server son diferentes a la URL del host (en este caso <a href=\"https:\/\/localhost:44302\">https:\/\/localhost:44302<\/a>).<\/p>\n<h2>Un poco de teor\u00eda, cabeceras X-Forwarded<\/h2>\n<p>Continuando con la configuraci\u00f3n de Identity Server vamos a explicar ahora en que consisten las cabeceras X-Forwarded-*.<\/p>\n<ul>\n<li><strong>X-Forwarded-For<\/strong>: El campo del encabezado HTTP <strong>X-Forwarded-For (XFF)<\/strong> es un m\u00e9todo com\u00fan para identificar la direcci\u00f3n IP de origen de un cliente que se conecta a un servidor web a trav\u00e9s de un proxy inverso HTTP o un balanceador de carga.<\/li>\n<\/ul>\n<p>El formato de esta cabecera es el siguiente<\/p>\n<ol>\n<li>X-Forwarded-For: &lt;client1, proxy1, proxy2, \u2026<\/li>\n<li>Ejemplo: <strong>X-Forwarded-For: 129.78.138.66, 129.78.64.103<\/strong><\/li>\n<\/ol>\n<ul>\n<li><strong>X-Forwarded-Proto<\/strong>: El campo del encabezado HTTP <strong>X-Forwarded-Proto<\/strong> es un m\u00e9todo com\u00fan para identificar el protocolo de origen de una solicitud HTTP, ya que un proxy inverso o un balanceador de carga, puede comunicarse con un servidor web utilizando HTTP, incluso si la solicitud al proxy inverso es HTTPS.<\/li>\n<\/ul>\n<p>El formato de esta cabecera es el siguiente<\/p>\n<ol>\n<li>X-Forwarded-Proto: &lt;protocol&gt;<\/li>\n<li>Ejemplo: <strong>X-Forwarded-Proto: https<\/strong><\/li>\n<\/ol>\n<ul>\n<li><strong>X-Forwarded-Port<\/strong>: El campo del encabezado HTTP <strong>X-Forwarded-Port<\/strong> es un m\u00e9todo com\u00fan para identificar el puerto original solicitado por el cliente en el encabezado de solicitud HTTP del host, ya que el nombre de host y \/ o el puerto del proxy inverso HTTP o balanceador de carga pueden diferir del servidor de origen que maneja la solicitud.<\/li>\n<\/ul>\n<p>El formato de esta cabecera es el siguiente<\/p>\n<ol>\n<li>X-Forwarded-Port: &lt;number&gt;<\/li>\n<li>Ejemplo: <strong>X-Forwarded-Port: 443<\/strong><\/li>\n<\/ol>\n<ul>\n<li><strong>X-Forwarded-Host<\/strong>: El campo del encabezado HTTP <strong>X-Forwarded-Host<\/strong> es un m\u00e9todo com\u00fan para identificar el host original solicitado por el cliente en el encabezado de solicitud HTTP del host, ya que el nombre de host y \/ o el puerto del proxy inverso HTTP o balanceador de carga pueden diferir del servidor de origen que maneja la solicitud.<\/li>\n<\/ul>\n<p>El formato de esta cabecera es el siguiente<\/p>\n<ol>\n<li>X-Forwarded-Host: &lt;host&gt;<\/li>\n<li>Ejemplo: <strong>X-Forwarded-Host: myurl.loadbalancer.com<\/strong><\/li>\n<\/ol>\n<p>Ya conocemos las cabeceras que debe exponer el balanceador de carga o el proxy. La siguiente configuraci\u00f3n aplica tanto a nuestro Identity Server como a nuestras aplicaciones web que van a autenticarse contra \u00e9l y tambi\u00e9n est\u00e1n detr\u00e1s del balanceador.<\/p>\n<p>En nuestro m\u00e9todo <strong>ConfigureServices<\/strong> aplicamos la siguiente configuraci\u00f3n (al inicio del m\u00e9todo o antes de <strong>.AddIdentityServer<\/strong>)<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\npublic IServiceProvider ConfigureServices(IServiceCollection services)\r\n{\r\n    services.Configure&lt;ForwardedHeadersOptions&gt;(options =&gt;\r\n    {\r\n         options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;\r\n    });\r\n         \u2026\r\n        services.AddIdentityServer(options =&gt;\r\n    { \r\n       options.PublicOrigin = &quot;https:\/\/myurl.loadbalancer.com&quot;;\r\n\toptions.IssuerUri = &quot;https:\/\/myurl.loadbalancer.com&quot;; \r\n    })\r\n    .AddOperationalStore(options =&gt;\r\n                              options.ConfigureDbContext = builder =&gt; builder.UseSqlServer(connectionString, sqlOptions =&gt; sqlOptions.MigrationsAssembly(migrationsAssembly)))\r\n\t\t.AddConfigurationStore(options =&gt;\r\n                              options.ConfigureDbContext = builder =&gt; builder.UseSqlServer(connectionString, sqlOptions =&gt; sqlOptions.MigrationsAssembly(migrationsAssembly)))\r\n\t\t.AddAspNetIdentity&lt;ApplicationUser&gt;()\r\n\t\t.AddDeveloperSigningCredential();\r\n         \u2026\r\n}\r\n\r\n<\/pre>\n<p>En nuestro m\u00e9todo <strong>Configure<\/strong> aplicamos la siguiente configuraci\u00f3n (al inicio del m\u00e9todo o antes de <strong>.UseIdentityServer<\/strong>)<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\npublic void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)\r\n{\r\n    var fordwardedHeaderOptions = new ForwardedHeadersOptions\r\n    {\r\n        ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto   \r\n    };\r\n            \r\n    fordwardedHeaderOptions.KnownNetworks.Clear();\r\n    fordwardedHeaderOptions.KnownProxies.Clear();\r\n\r\n    app.UseForwardedHeaders(fordwardedHeaderOptions);\r\n         \u2026\r\n        app.UseIdentityServer();\r\n         \u2026\r\n}\r\n\r\n<\/pre>\n<p>Bien, ya tenemos configurado nuestro Identity Server para colocarlo detr\u00e1s de cualquier balanceador de carga o proxy \u2026 \u00bfo no?<\/p>\n<h2>No se vayan todav\u00eda, a\u00fan hay m\u00e1s<\/h2>\n<p>Lo siguiente que vamos a contar es fruto de una lucha con <strong>Azure Api Gateway<\/strong> en la que nos hemos enfrascado hace poco.<\/p>\n<p>Azure Api Gateway mola mucho, pero tiene un peque\u00f1o gran inconveniente, NO genera la cabecera X-Forwarded-Host, sino que devuelve una cabecera X-ORIGINAL-HOST (ver <a href=\"https:\/\/feedback.azure.com\/forums\/217313-networking\/suggestions\/33657763-add-the-x-forwarded-host-header-to-application-gat\">Add the X-Forwarded-Host header to Application Gateway<\/a>), por lo que cuando se configura una aplicaci\u00f3n web para que autentique usuarios v\u00eda Identity Server, a la hora de generar la URL de redirecci\u00f3n, \u00e9sta se generaba de la siguiente forma:<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\nhttps:\/\/myurl.loadbalancer.com\/connect\/authorize?\r\nclient_id=myClientMVC&amp;amp;\r\nredirect_uri=https:\/\/10.124.1.4\/signin-oidc&amp;amp;\r\nresponse_type=code id_token&amp;amp;\r\nscope=openid profile&amp;amp;\r\nresponse_mode=form_post&amp;amp;\r\nnonce=636801444519810075.MTcwNjg1YzctNTAyZC00NDkxLWIxM2EtOWVhMGUzM2U4ODgzYmYzMGY1NDEtZDE0Yy00YTFkLWJhMjMtODhiMWNmNDQwMzdm&amp;amp;state=CfDJ8O7U_mOnuzpOo4VdJnNW0qCKkrd5eDfkxIO1GzUdULyVoiSQfIXkVst6PdpilljuA8KBh2kBROZ3hoG_K8i1V-fgIjcRs23mHuqbowRnd77dKzE8cZRt0VJuvE1Rns8jPcPLUXrCnj76TekCtZshgXw8HiL6dUSWSl2CqigtxBhcZY0p70m_2vYe80xORrpcc59MFsrAlX94z_UkNsacUsEmFbzKvgHVLS5VKT677gp7R284N6Q6Y6Ty15CDzXN1XQgqGxprVp3CDDWS7JaPKxXs5puyqgYHTjeuOVrqNFhJhi4ErLjplej9TNrBVfwtbQ&amp;amp;x-client-SKU=ID_NET&amp;amp;x-client-ver=2.1.4.0\r\n\r\n<\/pre>\n<p>Si os fij\u00e1is, la URL de redirecci\u00f3n es la IP del host de la aplicaci\u00f3n web. \u00bfC\u00f3mo solventar este problema? Pues es muuuuuy sencillo. Aprovechando que Asp.Net Core todo son Middlewares, simplemente despu\u00e9s de configurar las cabeceras X-Forwarded-* se aplica el siguiente truquito.<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\npublic void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)\r\n{\r\n    var fordwardedHeaderOptions = new ForwardedHeadersOptions\r\n    {\r\n        ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto | ForwardedHeaders.XForwardedHost\r\n    };\r\n    fordwardedHeaderOptions.KnownNetworks.Clear();\r\n    fordwardedHeaderOptions.KnownProxies.Clear();\r\n\r\n    app.UseForwardedHeaders(fordwardedHeaderOptions);\r\n\r\n    string XOriginalHost = &quot;X-ORIGINAL-HOST&quot;;\r\n\r\n    app.Use((context, next) =&gt;\r\n        {\r\n            if (context.Request.Headers.TryGetValue(XOriginalHost, out StringValues originalHostName))\r\n            {\r\n                context.Request.Host = new HostString(originalHostName);\r\n            }\r\n\r\n            return next();\r\n        });\r\n\r\n         \u2026\r\n}\r\n\r\n<\/pre>\n<p>En el middleware, se analiza la cabecera de la petici\u00f3n y, si existe la cabecera X-ORIGINAL-HOST, se sobrescribe en la petici\u00f3n. Fijaos tambi\u00e9n que hemos modificado las ForwardedHeadersOptions para recuperar la cabecera X-Forwarded-Host.<br \/>\nAhora s\u00ed que s\u00ed \u00a1lo tenemos!<\/p>\n<h2>Another one!<\/h2>\n<p>Como colof\u00f3n, os voy a explicar c\u00f3mo configurar Identity Server<strong> en el caso en que se requiera aplicar SSL Offload<\/strong> (b\u00e1sicamente es que toda comunicaci\u00f3n HTTPS se realiza hasta al balanceador de carga y a partir de ah\u00ed, la comunicaci\u00f3n con las aplicaciones web se realiza v\u00eda HTTP)<\/p>\n<p>Para ello se configura el pipeline de ejecuci\u00f3n de nuestra aplicaci\u00f3n web o de nuestro Identity Server (se requiere .Net Core 2.1 o posterior)<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\npublic IServiceProvider ConfigureServices(IServiceCollection services)\r\n{\r\n    services.Configure&lt;ForwardedHeadersOptions&gt;(options =&gt;\r\n    {\r\n        options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto | ForwardedHeaders.XForwardedHost;\r\n    });\r\n\r\n    services.AddHsts(options =&gt;\r\n    {\r\n        options.Preload = true;\r\n        options.IncludeSubDomains = true;\r\n        options.MaxAge = TimeSpan.FromDays(60);\r\n    });\r\n\r\n    services.AddHttpsRedirection(options =&gt; options.RedirectStatusCode = StatusCodes.Status307TemporaryRedirect);\r\n         \u2026\r\n}\r\n\r\npublic void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)\r\n{\r\n    var fordwardedHeaderOptions = new ForwardedHeadersOptions\r\n    {\r\n        ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto | ForwardedHeaders.XForwardedHost\r\n    };\r\n    fordwardedHeaderOptions.KnownNetworks.Clear();\r\n    fordwardedHeaderOptions.KnownProxies.Clear();\r\n\r\n    app.UseForwardedHeaders(fordwardedHeaderOptions);\r\n\r\n    string XOriginalHost = &quot;X-ORIGINAL-HOST&quot;;\r\n\r\n    app.Use((context, next) =&gt;\r\n        {\r\n            if (context.Request.Headers.TryGetValue(XOriginalHost, out StringValues originalHostName))\r\n            {\r\n                context.Request.Host = new HostString(originalHostName);\r\n            }\r\n\r\n            return next();\r\n        });\r\n\r\n\r\n    app.UseHttpsRedirection();\r\n         \u2026\r\n}\r\n\r\n<\/pre>\n<h2>Conclusiones<\/h2>\n<p>En este POST hemos visto que podemos configurar nuestro Identity Server y aplicaciones web en un entorno productivo que se encuentren detr\u00e1s de un balanceador de carga o proxy. Tambi\u00e9n hemos repasado c\u00f3mo aplicar el SSL Offload a nuestro Identity Server y alg\u00fan que otro truquito para Azure Api Gateway&#8230;as\u00ed que, HAPPY CODING!<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content --><span class=\"et_bloom_bottom_trigger\"><\/span>","protected":false},"excerpt":{"rendered":"<p>Hoy en d\u00eda, lo normal en un despliegue en Producci\u00f3n, es que se disponga de un balanceador de carga o un api proxy que act\u00faen como punto de entrada de las peticiones recibidas y se encarguen de enrutar dichas solicitudes &hellip; <a href=\"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-configurar-nuestro-identity-server-y-nuestras-aplicaciones-web-detras-de-un-load-balancer-o-un-api-gateway\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":185,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[70],"tags":[],"class_list":["post-989","post","type-post","status-publish","format-standard","hentry","category-net"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v18.2.1 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>C\u00f3mo configurar nuestro Identity Server (y nuestras aplicaciones web) detr\u00e1s de un Load Balancer o un Api Gateway | ENCAMINA<\/title>\n<meta name=\"description\" content=\"Sergio Parra nos ense\u00f1a a configurar nuestro Identity Server y aplicaciones web en un entorno productivo que se encuentren detr\u00e1s de un balanceador de carga o proxy.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-configurar-nuestro-identity-server-y-nuestras-aplicaciones-web-detras-de-un-load-balancer-o-un-api-gateway\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C\u00f3mo configurar nuestro Identity Server (y nuestras aplicaciones web) detr\u00e1s de un Load Balancer o un Api Gateway\" \/>\n<meta property=\"og:description\" content=\"Sergio Parra nos ense\u00f1a a configurar nuestro Identity Server y aplicaciones web en un entorno productivo que se encuentren detr\u00e1s de un balanceador de carga o proxy.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-configurar-nuestro-identity-server-y-nuestras-aplicaciones-web-detras-de-un-load-balancer-o-un-api-gateway\/\" \/>\n<meta property=\"og:site_name\" content=\"Piensa en software, desarrolla en colores\" \/>\n<meta property=\"article:published_time\" content=\"2018-12-18T11:34:16+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-12-18T12:27:56+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/12\/C\u00f3mo-configurar-nuestro-Identity-Server-2.png.jpg\" \/>\n<meta name=\"author\" content=\"Sergio Parra Guerra\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sergio Parra Guerra\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/como-configurar-nuestro-identity-server-y-nuestras-aplicaciones-web-detras-de-un-load-balancer-o-un-api-gateway\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/como-configurar-nuestro-identity-server-y-nuestras-aplicaciones-web-detras-de-un-load-balancer-o-un-api-gateway\\\/\"},\"author\":{\"name\":\"Sergio Parra Guerra\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#\\\/schema\\\/person\\\/bc314219999e4f7ed909d299efa70f4b\"},\"headline\":\"C\u00f3mo configurar nuestro Identity Server (y nuestras aplicaciones web) detr\u00e1s de un Load Balancer o un Api Gateway\",\"datePublished\":\"2018-12-18T11:34:16+00:00\",\"dateModified\":\"2018-12-18T12:27:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/como-configurar-nuestro-identity-server-y-nuestras-aplicaciones-web-detras-de-un-load-balancer-o-un-api-gateway\\\/\"},\"wordCount\":1464,\"commentCount\":0,\"articleSection\":[\".NET\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/como-configurar-nuestro-identity-server-y-nuestras-aplicaciones-web-detras-de-un-load-balancer-o-un-api-gateway\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/como-configurar-nuestro-identity-server-y-nuestras-aplicaciones-web-detras-de-un-load-balancer-o-un-api-gateway\\\/\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/como-configurar-nuestro-identity-server-y-nuestras-aplicaciones-web-detras-de-un-load-balancer-o-un-api-gateway\\\/\",\"name\":\"C\u00f3mo configurar nuestro Identity Server (y nuestras aplicaciones web) detr\u00e1s de un Load Balancer o un Api Gateway | ENCAMINA\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#website\"},\"datePublished\":\"2018-12-18T11:34:16+00:00\",\"dateModified\":\"2018-12-18T12:27:56+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#\\\/schema\\\/person\\\/bc314219999e4f7ed909d299efa70f4b\"},\"description\":\"Sergio Parra nos ense\u00f1a a configurar nuestro Identity Server y aplicaciones web en un entorno productivo que se encuentren detr\u00e1s de un balanceador de carga o proxy.\",\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/como-configurar-nuestro-identity-server-y-nuestras-aplicaciones-web-detras-de-un-load-balancer-o-un-api-gateway\\\/\"]}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#website\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/\",\"name\":\"Piensa en software, desarrolla en colores\",\"description\":\"Las ventajas que te ofrece Microsoft Azure y el mundo.NET\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#\\\/schema\\\/person\\\/bc314219999e4f7ed909d299efa70f4b\",\"name\":\"Sergio Parra Guerra\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/59ba4f5f51b231ec5a3ce33035eba3ee35017746169421c702972da2f50574c2?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/59ba4f5f51b231ec5a3ce33035eba3ee35017746169421c702972da2f50574c2?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/59ba4f5f51b231ec5a3ce33035eba3ee35017746169421c702972da2f50574c2?s=96&d=mm&r=g\",\"caption\":\"Sergio Parra Guerra\"},\"description\":\"Sergio Parra es Ingeniero T\u00e9cnico en Inform\u00e1tica de Sistemas por la UPSAM. Tiene a sus espaldas much\u00edsimas certificaciones entre las cuales Microsoft Certified Professional y ex Microsoft MVP Visual Studio and Development Technologies. Actualmente es un magn\u00edfico Software &amp; Cloud Architect en ENCAMINA.\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/author\\\/sparra\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"C\u00f3mo configurar nuestro Identity Server (y nuestras aplicaciones web) detr\u00e1s de un Load Balancer o un Api Gateway | ENCAMINA","description":"Sergio Parra nos ense\u00f1a a configurar nuestro Identity Server y aplicaciones web en un entorno productivo que se encuentren detr\u00e1s de un balanceador de carga o proxy.","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:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-configurar-nuestro-identity-server-y-nuestras-aplicaciones-web-detras-de-un-load-balancer-o-un-api-gateway\/","og_locale":"es_ES","og_type":"article","og_title":"C\u00f3mo configurar nuestro Identity Server (y nuestras aplicaciones web) detr\u00e1s de un Load Balancer o un Api Gateway","og_description":"Sergio Parra nos ense\u00f1a a configurar nuestro Identity Server y aplicaciones web en un entorno productivo que se encuentren detr\u00e1s de un balanceador de carga o proxy.","og_url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-configurar-nuestro-identity-server-y-nuestras-aplicaciones-web-detras-de-un-load-balancer-o-un-api-gateway\/","og_site_name":"Piensa en software, desarrolla en colores","article_published_time":"2018-12-18T11:34:16+00:00","article_modified_time":"2018-12-18T12:27:56+00:00","og_image":[{"url":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/12\/C\u00f3mo-configurar-nuestro-Identity-Server-2.png.jpg","type":"","width":"","height":""}],"author":"Sergio Parra Guerra","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Sergio Parra Guerra","Tiempo de lectura":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-configurar-nuestro-identity-server-y-nuestras-aplicaciones-web-detras-de-un-load-balancer-o-un-api-gateway\/#article","isPartOf":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-configurar-nuestro-identity-server-y-nuestras-aplicaciones-web-detras-de-un-load-balancer-o-un-api-gateway\/"},"author":{"name":"Sergio Parra Guerra","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#\/schema\/person\/bc314219999e4f7ed909d299efa70f4b"},"headline":"C\u00f3mo configurar nuestro Identity Server (y nuestras aplicaciones web) detr\u00e1s de un Load Balancer o un Api Gateway","datePublished":"2018-12-18T11:34:16+00:00","dateModified":"2018-12-18T12:27:56+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-configurar-nuestro-identity-server-y-nuestras-aplicaciones-web-detras-de-un-load-balancer-o-un-api-gateway\/"},"wordCount":1464,"commentCount":0,"articleSection":[".NET"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-configurar-nuestro-identity-server-y-nuestras-aplicaciones-web-detras-de-un-load-balancer-o-un-api-gateway\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-configurar-nuestro-identity-server-y-nuestras-aplicaciones-web-detras-de-un-load-balancer-o-un-api-gateway\/","url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-configurar-nuestro-identity-server-y-nuestras-aplicaciones-web-detras-de-un-load-balancer-o-un-api-gateway\/","name":"C\u00f3mo configurar nuestro Identity Server (y nuestras aplicaciones web) detr\u00e1s de un Load Balancer o un Api Gateway | ENCAMINA","isPartOf":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#website"},"datePublished":"2018-12-18T11:34:16+00:00","dateModified":"2018-12-18T12:27:56+00:00","author":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#\/schema\/person\/bc314219999e4f7ed909d299efa70f4b"},"description":"Sergio Parra nos ense\u00f1a a configurar nuestro Identity Server y aplicaciones web en un entorno productivo que se encuentren detr\u00e1s de un balanceador de carga o proxy.","inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-configurar-nuestro-identity-server-y-nuestras-aplicaciones-web-detras-de-un-load-balancer-o-un-api-gateway\/"]}]},{"@type":"WebSite","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#website","url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/","name":"Piensa en software, desarrolla en colores","description":"Las ventajas que te ofrece Microsoft Azure y el mundo.NET","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#\/schema\/person\/bc314219999e4f7ed909d299efa70f4b","name":"Sergio Parra Guerra","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/59ba4f5f51b231ec5a3ce33035eba3ee35017746169421c702972da2f50574c2?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/59ba4f5f51b231ec5a3ce33035eba3ee35017746169421c702972da2f50574c2?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/59ba4f5f51b231ec5a3ce33035eba3ee35017746169421c702972da2f50574c2?s=96&d=mm&r=g","caption":"Sergio Parra Guerra"},"description":"Sergio Parra es Ingeniero T\u00e9cnico en Inform\u00e1tica de Sistemas por la UPSAM. Tiene a sus espaldas much\u00edsimas certificaciones entre las cuales Microsoft Certified Professional y ex Microsoft MVP Visual Studio and Development Technologies. Actualmente es un magn\u00edfico Software &amp; Cloud Architect en ENCAMINA.","url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/author\/sparra\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/posts\/989","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/users\/185"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/comments?post=989"}],"version-history":[{"count":0,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/posts\/989\/revisions"}],"wp:attachment":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/media?parent=989"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/categories?post=989"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/tags?post=989"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}