{"id":952,"date":"2018-11-30T08:42:28","date_gmt":"2018-11-30T08:42:28","guid":{"rendered":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/?p=952"},"modified":"2018-11-30T09:20:30","modified_gmt":"2018-11-30T09:20:30","slug":"como-securizar-tus-apps-con-identity-server-y-net-core-parte-ii","status":"publish","type":"post","link":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-securizar-tus-apps-con-identity-server-y-net-core-parte-ii\/","title":{"rendered":"C\u00f3mo securizar tus apps con Identity Server y .NET Core (Parte II)"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-959\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/11\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II.4.jpg\" alt=\"\" width=\"968\" height=\"672\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/11\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II.4.jpg 968w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/11\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II.4-300x208.jpg 300w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/11\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II.4-768x533.jpg 768w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/11\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II.4-610x423.jpg 610w\" sizes=\"auto, (max-width: 968px) 100vw, 968px\" \/><\/p>\n<p>Tomando el relevo del post escrito por el gran Adri\u00e1n D\u00edaz (<a href=\"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/securizar-tus-apps-identity-server-net-core-parte-i\/\" target=\"_blank\" rel=\"noopener\">C\u00f3mo securizar tus apps con Identity Server y .NET Core (Parte I)<\/a>), quiero ense\u00f1aros c\u00f3mo autenticar a los usuarios mediante usuario y contrase\u00f1a. Empezamos creando nuestro servidor de identidades para centralizar tanto la autenticaci\u00f3n como la autorizaci\u00f3n, y as\u00ed crear una aplicaci\u00f3n web que securizaremos mediante usuario y contrase\u00f1a.<\/p>\n<p><!--more--><\/p>\n<h2>Al turr\u00f3n\u2026 Configurando nuestro Identity Server para autenticar usuarios<\/h2>\n<p>En el anterior art\u00edculo vimos c\u00f3mo configurar nuestro <strong>Identity Server<\/strong>. El cambio que haremos es definir los usuarios que pueden autenticarse. Para ello se van a definir recursos de identidad personalizados (los llamados <strong>\u201cclaims\u201d<\/strong>) y usuarios en el arranque de la aplicaci\u00f3n<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\npublic void ConfigureServices(IServiceCollection services)\r\n{\r\n     services.AddMvc();\r\n     services.AddIdentityServer()\r\n              .AddDeveloperSigningCredential()                    \r\n              .AddInMemoryApiResources(Config.GetApiResources())\r\n              .AddInMemoryClients(Config.GetClients())\r\n              .AddInMemoryIdentityResources(Config.GetIdentityResources()) \/\/ damos de alta nuevos recursos de identidad\r\n              .AddTestUsers(Config.GetUsers()); \/\/ damos de alta usuarios a autenticar\r\n}\r\n<\/pre>\n<p>En la clase Config.cs definiremos los claims de identidad<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\npublic static IEnumerable&lt;IdentityResource&gt; GetIdentityResources()\r\n{\r\n    return new List&lt;IdentityResource&gt;\r\n    {\r\n        new IdentityResources.OpenId(), \/\/ claim est\u00e1ndar\r\n        new IdentityResources.Profile(), \/\/ claim est\u00e1ndar\r\n        new IdentityResources.Email(), \/\/ claim est\u00e1ndar\r\n        new IdentityResource \/\/ claim personalizado\r\n        {\r\n            Name = &quot;Name&quot;,\r\n            UserClaims = new List&lt;string&gt; {&quot;name&quot;}\r\n        },\r\n        new IdentityResource \/\/ claim personalizado\r\n        {\r\n            Name = &quot;Surname&quot;,\r\n            UserClaims = new List&lt;string&gt; {&quot;surname&quot;}\r\n        },\r\n        new IdentityResource \/\/ claim personalizado\r\n        {\r\n            Name = &quot;WorkPlace&quot;,\r\n            UserClaims = new List&lt;string&gt; {&quot;workplace&quot;}\r\n        }\r\n   };\r\n}\r\n<\/pre>\n<p>Y tambi\u00e9n los usuarios:<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\npublic static List&lt;TestUser&gt; GetUsers()\r\n{\r\n    return new List&lt;TestUser&gt;\r\n    {\r\n        new TestUser\r\n        {\r\n            SubjectId = &quot;1&quot;,\r\n            Username = &quot;adrian&quot;,\r\n            Password = &quot;elrealmadridcampeondeeuropaunavezmas&quot;\r\n        },\r\n        new TestUser\r\n        {\r\n            SubjectId = &quot;2&quot;,\r\n            Username = &quot;parrita&quot;,\r\n            Password = &quot;thesame&quot;\r\n        }\r\n    };\r\n}\r\n<\/pre>\n<p>Vamos a configurar un nuevo cliente que consumir\u00e1 la API securizada por nuestro servidor de identidades, con un tipo de \u201cgrant\u201d o concesi\u00f3n denominada: <strong>HybridAndClientCredentials<\/strong>, ya que vamos a permitir autenticar una persona por usuario y contrase\u00f1a.<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\npublic static IEnumerable&lt;Client&gt; GetClients()\r\n{\r\n    return new List&lt;Client&gt;\r\n    {\r\n        new Client\r\n        {\r\n            ClientId = &quot;MyEncamina&quot;,\r\n            \/\/ no interactive user, use the clientid\/secret for authentication\r\n            AllowedGrantTypes = GrantTypes.ClientCredentials,\r\n            \/\/ secret for authentication\r\n            ClientSecrets =\r\n            {\r\n                new Secret(&quot;++++++&quot;.Sha256())\r\n            },\r\n            \/\/ scopes that client has access to\r\n            AllowedScopes = { &quot;APIEmployee&quot; }\r\n        },\r\n        new Client\r\n        {\r\n            ClientId = &quot;openIdEncamina&quot;,\r\n            ClientName = &quot;Example Implicit Client Application&quot;,\r\n            ClientSecrets = new List&lt;Secret&gt; { new Secret(&quot;superSecretPassword&quot;.Sha256()) },\r\n            AllowedGrantTypes = GrantTypes.HybridAndClientCredentials,\r\n            AlwaysSendClientClaims=true,\r\n            AllowedScopes = new List&lt;string&gt;\r\n            {\r\n                IdentityServerConstants.StandardScopes.OpenId,\r\n                IdentityServerConstants.StandardScopes.Profile,\r\n                IdentityServerConstants.StandardScopes.Email,\r\n                &quot;APIEmployee\u201d, &quot;APICustomer\u201d, \r\n            },\r\n            RedirectUris = new List&lt;string&gt; { &quot;https:\/\/localhost:44392\/signin-oidc&quot; },\r\n            PostLogoutRedirectUris = new List&lt;string&gt; { &quot;https:\/\/localhost:44392\/&quot; }\r\n         }\r\n    };\r\n}\r\n<\/pre>\n<p>Si nos fijamos en la configuraci\u00f3n del nuevo cliente, observaremos que existen dos URLs de redirecci\u00f3n. Estas direcciones son las que usa Identity Server para redireccionar en caso de login correcto (RedirectUris) y en caso de realizar el logout de nuestra aplicaci\u00f3n web.<\/p>\n<blockquote><p>NOTA: Es importante que la redirecci\u00f3n de login correcto acabe en \/signin-oidc ya que es un endpoint de callback definido en el protocolo OpenId.<\/p><\/blockquote>\n<p>Con esto, si iniciamos nuestro Identity Server y nos posicionamos en la siguiente URL\/: .well-known\/openid-configuration, se mostrar\u00e1 la nueva configuraci\u00f3n (los claims de usuario tanto los expuestos por el est\u00e1ndar OpenId como los personalizados) y los nuevos \u00e1mbitos soportados.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-954\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/11\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II.png\" alt=\"\" width=\"1228\" height=\"1085\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/11\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II.png 1228w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/11\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II-300x265.png 300w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/11\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II-768x679.png 768w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/11\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II-1024x905.png 1024w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/11\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II-610x539.png 610w\" sizes=\"auto, (max-width: 1228px) 100vw, 1228px\" \/><\/p>\n<p>En el c\u00f3digo de ejemplo se ha definido una vista y controlador para realizar el login del usuario cuyo layout es el siguiente:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-953\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/11\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II.2.png\" alt=\"\" width=\"1555\" height=\"820\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/11\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II.2.png 1555w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/11\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II.2-300x158.png 300w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/11\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II.2-768x405.png 768w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/11\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II.2-1024x540.png 1024w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/11\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II.2-610x322.png 610w\" sizes=\"auto, (max-width: 1555px) 100vw, 1555px\" \/><\/p>\n<p>Con esto centralizamos y personalizamos nuestra p\u00e1gina de solicitud de credenciales.<\/p>\n<h2>Configurando nuestra aplicaci\u00f3n web para autenticar usuarios<\/h2>\n<p>Lo primero que se debe hacer es instalar el paquete NuGet <strong>IdentityServer4.AccessTokenValidation<\/strong> y, dentro de nuestro proyecto, a\u00f1adiremos el siguiente c\u00f3digo en el Startup.cs, para configurar el arranque de la aplicaci\u00f3n web.<\/p>\n<p>Agregamos al contenedor de inyecci\u00f3n de dependencias y agregamos la configuraci\u00f3n para emplear el protocolo OpenId que pasaremos a explicar.<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\npublic void ConfigureServices(IServiceCollection services)\r\n{\r\n    services.Configure&lt;CookiePolicyOptions&gt;(options =&gt;\r\n    {\r\n        options.CheckConsentNeeded = context =&gt; true;\r\n        options.MinimumSameSitePolicy = SameSiteMode.None;\r\n    });\r\n\r\n    JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();\r\n\r\n    services.AddAuthentication(&quot;Bearer&quot;)\r\n            .AddIdentityServerAuthentication(options =&gt;\r\n    {\r\n        options.Authority = &quot;https:\/\/localhost:44384\/&quot;;\r\n        options.ApiName = &quot;EncaminaAPI&quot;;\r\n    });\r\n\r\n    services.AddAuthentication(options =&gt;\r\n    {\r\n        options.DefaultScheme = &quot;cookie&quot;;\r\n        options.DefaultChallengeScheme = &quot;oidc&quot;;\r\n    })\r\n    .AddCookie(&quot;cookie&quot;)\r\n    .AddOpenIdConnect(&quot;oidc&quot;, options =&gt;\r\n    {\r\n        options.Authority = &quot;https:\/\/localhost:44384\/&quot;;\r\n        options.ClientId = &quot;openIdEncamina&quot;;\r\n        options.ClientSecret = &quot;superSecretPassword&quot;;\r\n        options.SignInScheme = &quot;cookie&quot;;\r\n        options.SaveTokens = true;\r\n        options.ResponseType = &quot;code id_token&quot;;\r\n        options.GetClaimsFromUserInfoEndpoint = true;\r\n\r\n        options.Scope.Add(&quot;openid&quot;);\r\n        options.Scope.Add(&quot;profile&quot;);\r\n        options.Scope.Add(&quot;APIEmployee&quot;); \/\/ \u00e1mbito al cual se va a poder conectar este cliente OpenId\r\n                 \r\n    });\r\n\r\n\r\n    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);\r\n}\r\n<\/pre>\n<p>Con <strong>AddAuthentication<\/strong>, se agrega el servicio de autenticaci\u00f3n en DI. Usaremos como elemento principal de autenticaci\u00f3n la validaci\u00f3n de Tokens Bearer. M\u00e1s tarde, agregamos los esquemas de validaci\u00f3n de <strong>cookie<\/strong> y de <strong>oidc (ya que esto indica que vamos a necesitar el esquema de OpenId para el login del usuario).<\/strong><\/p>\n<p>Con<strong> AddCookie<\/strong> a\u00f1adimos el manejador o <strong>handler<\/strong> que procesa las cookies.<\/p>\n<p>Finalmente,<strong> AddOpenIdConnect<\/strong> configura el manejador del protocolo OpenId. La parte m\u00e1s importante es el <strong>Authority<\/strong> que indica el servidor de identidades de confianza, y <strong>SaveTokens<\/strong> para guardar el token que devuelve <strong>Identity Server<\/strong> en la cookie.<\/p>\n<p>A continuaci\u00f3n, toca hacer uso de la autenticaci\u00f3n definida en el m\u00e9todo anterior en el pipeline HTTP.<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\npublic void Configure(IApplicationBuilder app, IHostingEnvironment env)\r\n{\r\n    if (env.IsDevelopment())\r\n    {\r\n        app.UseDeveloperExceptionPage();\r\n    }\r\n    else\r\n    {\r\n        app.UseExceptionHandler(&quot;\/Home\/Error&quot;);\r\n        app.UseHsts();\r\n    }\r\n             \r\n    \/\/ hacemos uso de autenticaci\u00f3n\r\n    app.UseAuthentication();\r\n\r\n    app.UseStaticFiles();\r\n    app.UseMvcWithDefaultRoute();\r\n}\r\n<\/pre>\n<p>En el punto de entrada de nuestra aplicaci\u00f3n Web (por defecto el controlador Home), activamos la seguridad empleando para ello el atributo [Authorize]. Esto provoca que al acceder a dicho controlador, se verifique si existe o bien token Bearer o una cookie de identidad y si no existiera, la solicitud se redirige a la p\u00e1gina de Login de Identity Server para autenticar el usuario v\u00eda <strong>OpenId.<\/strong><\/p>\n<p>Iniciando primero nuestro servidor de identidades y despu\u00e9s nuestra aplicaci\u00f3n web obtenemos algo parecido a la imagen (fijaos bien en la url de la aplicaci\u00f3n Web)<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-955\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/11\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II.3.png\" alt=\"\" width=\"1812\" height=\"1198\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/11\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II.3.png 1812w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/11\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II.3-300x198.png 300w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/11\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II.3-768x508.png 768w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/11\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II.3-1024x677.png 1024w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/11\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II.3-610x403.png 610w\" sizes=\"auto, (max-width: 1812px) 100vw, 1812px\" \/><\/p>\n<p>Nos identificamos, y<em> voil\u00e1,<\/em> accedemos a nuestra aplicaci\u00f3n web y podemos ver el token que nos ha generado Identity Server.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-956\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/11\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II.4.png\" alt=\"\" width=\"1930\" height=\"1344\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/11\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II.4.png 1930w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/11\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II.4-300x209.png 300w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/11\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II.4-768x535.png 768w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/11\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II.4-1024x713.png 1024w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/11\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II.4-610x425.png 610w\" sizes=\"auto, (max-width: 1930px) 100vw, 1930px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Ya que soy un poco vaguete, he puesto el token en esta p\u00e1gina para poder copiarlo y verificar que es un token bueno \ud83d\ude0a.<\/p>\n<h2>CONCLUSIONES<\/h2>\n<p>En este post hemos comprobado que podemos configurar nuestro Identity Server para autenticar usuarios de nuestra web. En siguientes art\u00edculos os ense\u00f1ar\u00e9 c\u00f3mo definir pol\u00edticas de autorizaci\u00f3n en nuestras APIs y c\u00f3mo combinar el poder de <strong>Identity Server<\/strong> con el poder de <strong>AspNet Identity<\/strong> y los configuraremos en base de datos empleando para ello <strong>Entity framework Core. <\/strong>\u00a0Tambi\u00e9n veremos c\u00f3mo autenticar v\u00eda proveedor externo como <strong>Twitter<\/strong> o <strong>Google<\/strong>.<\/p>\n<p>Mientras tanto 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>Tomando el relevo del post escrito por el gran Adri\u00e1n D\u00edaz (C\u00f3mo securizar tus apps con Identity Server y .NET Core (Parte I)), quiero ense\u00f1aros c\u00f3mo autenticar a los usuarios mediante usuario y contrase\u00f1a. Empezamos creando nuestro servidor de identidades &hellip; <a href=\"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-securizar-tus-apps-con-identity-server-y-net-core-parte-ii\/\">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":959,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[70,77],"tags":[],"class_list":["post-952","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-net","category-seguridad"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v18.2.1 (Yoast SEO v28.7) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>C\u00f3mo securizar tus apps con Identity Server y .NET Core (Parte II) | ENCAMINA<\/title>\n<meta name=\"description\" content=\"Sergio Parra se adentra en Identity Server para autenticar, autorizar y securizar tanto las aplicaciones como los usuarios en nuestros desarrollo.\" \/>\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-securizar-tus-apps-con-identity-server-y-net-core-parte-ii\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C\u00f3mo securizar tus apps con Identity Server y .NET Core (Parte II)\" \/>\n<meta property=\"og:description\" content=\"Sergio Parra se adentra en Identity Server para autenticar, autorizar y securizar tanto las aplicaciones como los usuarios en nuestros desarrollo.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-securizar-tus-apps-con-identity-server-y-net-core-parte-ii\/\" \/>\n<meta property=\"og:site_name\" content=\"Piensa en software, desarrolla en colores\" \/>\n<meta property=\"article:published_time\" content=\"2018-11-30T08:42:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-11-30T09:20:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/11\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II.4.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"968\" \/>\n\t<meta property=\"og:image:height\" content=\"672\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\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=\"6 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-securizar-tus-apps-con-identity-server-y-net-core-parte-ii\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/como-securizar-tus-apps-con-identity-server-y-net-core-parte-ii\\\/\"},\"author\":{\"name\":\"Sergio Parra Guerra\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#\\\/schema\\\/person\\\/0216f6ee55b1b066697ce9a3478a1808\"},\"headline\":\"C\u00f3mo securizar tus apps con Identity Server y .NET Core (Parte II)\",\"datePublished\":\"2018-11-30T08:42:28+00:00\",\"dateModified\":\"2018-11-30T09:20:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/como-securizar-tus-apps-con-identity-server-y-net-core-parte-ii\\\/\"},\"wordCount\":1225,\"commentCount\":1,\"image\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/como-securizar-tus-apps-con-identity-server-y-net-core-parte-ii\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/wp-content\\\/uploads\\\/sites\\\/21\\\/2018\\\/11\\\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II.4.jpg\",\"articleSection\":[\".NET\",\"seguridad\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/como-securizar-tus-apps-con-identity-server-y-net-core-parte-ii\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/como-securizar-tus-apps-con-identity-server-y-net-core-parte-ii\\\/\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/como-securizar-tus-apps-con-identity-server-y-net-core-parte-ii\\\/\",\"name\":\"C\u00f3mo securizar tus apps con Identity Server y .NET Core (Parte II) | ENCAMINA\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/como-securizar-tus-apps-con-identity-server-y-net-core-parte-ii\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/como-securizar-tus-apps-con-identity-server-y-net-core-parte-ii\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/wp-content\\\/uploads\\\/sites\\\/21\\\/2018\\\/11\\\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II.4.jpg\",\"datePublished\":\"2018-11-30T08:42:28+00:00\",\"dateModified\":\"2018-11-30T09:20:30+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#\\\/schema\\\/person\\\/0216f6ee55b1b066697ce9a3478a1808\"},\"description\":\"Sergio Parra se adentra en Identity Server para autenticar, autorizar y securizar tanto las aplicaciones como los usuarios en nuestros desarrollo.\",\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/como-securizar-tus-apps-con-identity-server-y-net-core-parte-ii\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/como-securizar-tus-apps-con-identity-server-y-net-core-parte-ii\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/wp-content\\\/uploads\\\/sites\\\/21\\\/2018\\\/11\\\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II.4.jpg\",\"contentUrl\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/wp-content\\\/uploads\\\/sites\\\/21\\\/2018\\\/11\\\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II.4.jpg\",\"width\":968,\"height\":672},{\"@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\\\/0216f6ee55b1b066697ce9a3478a1808\",\"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 securizar tus apps con Identity Server y .NET Core (Parte II) | ENCAMINA","description":"Sergio Parra se adentra en Identity Server para autenticar, autorizar y securizar tanto las aplicaciones como los usuarios en nuestros desarrollo.","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-securizar-tus-apps-con-identity-server-y-net-core-parte-ii\/","og_locale":"es_ES","og_type":"article","og_title":"C\u00f3mo securizar tus apps con Identity Server y .NET Core (Parte II)","og_description":"Sergio Parra se adentra en Identity Server para autenticar, autorizar y securizar tanto las aplicaciones como los usuarios en nuestros desarrollo.","og_url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-securizar-tus-apps-con-identity-server-y-net-core-parte-ii\/","og_site_name":"Piensa en software, desarrolla en colores","article_published_time":"2018-11-30T08:42:28+00:00","article_modified_time":"2018-11-30T09:20:30+00:00","og_image":[{"width":968,"height":672,"url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/11\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II.4.jpg","type":"image\/jpeg"}],"author":"Sergio Parra Guerra","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Sergio Parra Guerra","Tiempo de lectura":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-securizar-tus-apps-con-identity-server-y-net-core-parte-ii\/#article","isPartOf":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-securizar-tus-apps-con-identity-server-y-net-core-parte-ii\/"},"author":{"name":"Sergio Parra Guerra","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#\/schema\/person\/0216f6ee55b1b066697ce9a3478a1808"},"headline":"C\u00f3mo securizar tus apps con Identity Server y .NET Core (Parte II)","datePublished":"2018-11-30T08:42:28+00:00","dateModified":"2018-11-30T09:20:30+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-securizar-tus-apps-con-identity-server-y-net-core-parte-ii\/"},"wordCount":1225,"commentCount":1,"image":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-securizar-tus-apps-con-identity-server-y-net-core-parte-ii\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/11\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II.4.jpg","articleSection":[".NET","seguridad"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-securizar-tus-apps-con-identity-server-y-net-core-parte-ii\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-securizar-tus-apps-con-identity-server-y-net-core-parte-ii\/","url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-securizar-tus-apps-con-identity-server-y-net-core-parte-ii\/","name":"C\u00f3mo securizar tus apps con Identity Server y .NET Core (Parte II) | ENCAMINA","isPartOf":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-securizar-tus-apps-con-identity-server-y-net-core-parte-ii\/#primaryimage"},"image":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-securizar-tus-apps-con-identity-server-y-net-core-parte-ii\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/11\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II.4.jpg","datePublished":"2018-11-30T08:42:28+00:00","dateModified":"2018-11-30T09:20:30+00:00","author":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#\/schema\/person\/0216f6ee55b1b066697ce9a3478a1808"},"description":"Sergio Parra se adentra en Identity Server para autenticar, autorizar y securizar tanto las aplicaciones como los usuarios en nuestros desarrollo.","inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-securizar-tus-apps-con-identity-server-y-net-core-parte-ii\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/como-securizar-tus-apps-con-identity-server-y-net-core-parte-ii\/#primaryimage","url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/11\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II.4.jpg","contentUrl":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2018\/11\/C\u00f3mo-securizar-tus-apps-con-Identity-Server-y-.NET-Core-Parte-II.4.jpg","width":968,"height":672},{"@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\/0216f6ee55b1b066697ce9a3478a1808","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\/952","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=952"}],"version-history":[{"count":0,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/posts\/952\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/media\/959"}],"wp:attachment":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/media?parent=952"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/categories?post=952"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/tags?post=952"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}