es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Compartir cookie de autenticación entre clientes de IdentityServer4.

Implementé un Solo inicio de sesión (SSO) con dos aplicaciones como clientes. Quiero que el usuario se autentique en la primera aplicación a través de la aplicación SSO, en la segunda aplicación no es necesario iniciar sesión ni autenticarse de nuevo (compartir cookie de autenticación).

Información:

localhost:44372 => SSO
localhost:44387 => SSO Client_1
localhost:44382 => SSO Client_2
Todos los proyectos son ASP.NET 5

Código de proyectos SSO:

Startup.cs:

 public void ConfigureServices(IServiceCollection services)
        {
            //...

            services.AddIdentityServer()
                .AddDeveloperSigningCredential()
                .AddInMemoryIdentityResources(Config.GetIndentityResources())
                .AddInMemoryClients(Config.GetClients())
                .AddTestUsers(TestUsers.Users);
        }

Config.cs:

  public class Config
    {
        public static IEnumerable<IdentityResource> GetIndentityResources()
        {
            //...
        }

        public static IEnumerable<Client> GetClients()
        {
            return new List<Client>()
            {
                new Client()
                {
                    ClientId = "Client_1",
                    ClientName = "SSO Application",
                    AllowedGrantTypes = GrantTypes.Implicit,
                    RedirectUris = {"https://localhost:44387/signin-oidc"},
                    PostLogoutRedirectUris = {"https://localhost:44387/signout-callback-oidc"},
                    AllowedScopes = new List<string>()
                    {
                        IdentityServerConstants.StandardScopes.OpenId,
                        IdentityServerConstants.StandardScopes.Profile
                    }
                },
                 new Client()
                {
                    ClientId = "Client_2",
                    ClientName = "SSO Application 2",
                    AllowedGrantTypes = GrantTypes.Implicit,
                    RedirectUris = {"https://localhost:44382/signin-oidc"},
                    PostLogoutRedirectUris = {"https://localhost:44382/signout-callback-oidc"},
                    AllowedScopes = new List<string>()
                    {
                        IdentityServerConstants.StandardScopes.OpenId,
                        IdentityServerConstants.StandardScopes.Profile
                    }
                }
            };
        }
    }

¿Cómo puedo compartir autenticación entre clientes?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para compartir la autenticación entre los clientes, es necesario utilizar un middleware de autenticación de cookies compartidas.

    1. Agregue el paquete Microsoft.AspNetCore.Authentication.Cookies a ambos proyectos de cliente.
    2. En el método ConfigureServices del archivo Startup.cs del proyecto SSO, agregue el siguiente código para configurar la autenticación de cookies:

      services.AddAuthentication("Cookie")
                  .AddCookie("Cookie", options =>
                  {
                      options.Cookie.Name = "SSO.Cookie";
                      options.Cookie.SameSite = SameSiteMode.None;
                      options.Cookie.SecurePolicy = CookieSecurePolicy.None;
                  });
      

      Esto configura el middleware de cookies con el nombre Cookie, establece el nombre de la cookie en SSO.Cookie y configura las opciones de seguridad.

    3. En el método Configure del archivo Startup.cs del proyecto SSO, agregue el siguiente código para habilitar el middleware de autenticación de cookies:

      app.UseAuthentication();
      

    4. En el método ConfigureServices de ambos proyectos de cliente, agregue el siguiente código para configurar la autenticación de cookies:
      services.AddAuthentication("Cookie")
                  .AddCookie("Cookie", options =>
                  {
                      options.Cookie.Name = "SSO.Cookie";
                      options.Cookie.SameSite = SameSiteMode.None;
                      options.Cookie.SecurePolicy = CookieSecurePolicy.None;
                  });
      

      Esto configura el middleware de cookies con el mismo nombre Cookie, establece el nombre de la cookie en SSO.Cookie y configura las mismas opciones de seguridad.

    5. En el método Configure de ambos proyectos de cliente, agregue el siguiente código para habilitar el middleware de autenticación de cookies:

      app.UseAuthentication();
      

    Con estos cambios, ambas aplicaciones de clientes compartirán el mismo middleware de autenticación de cookies con la aplicación SSO. Cuando el usuario inicie sesión en la aplicación SSO, el middleware de autenticación de cookies emitirá una cookie con la información de autenticación. Esta cookie se enviará con las solicitudes a ambas aplicaciones de cliente, y podrán utilizarla para autenticar al usuario sin tener que iniciar sesión nuevamente.

Comments are closed.