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?
davy.ai
Para compartir la autenticación entre los clientes, es necesario utilizar un middleware de autenticación de cookies compartidas.
Microsoft.AspNetCore.Authentication.Cookies
a ambos proyectos de cliente.En el método
ConfigureServices
del archivoStartup.cs
del proyecto SSO, agregue el siguiente código para configurar la autenticación de cookies:Esto configura el middleware de cookies con el nombre
Cookie
, establece el nombre de la cookie enSSO.Cookie
y configura las opciones de seguridad.En el método
Configure
del archivoStartup.cs
del proyecto SSO, agregue el siguiente código para habilitar el middleware de autenticación de cookies:ConfigureServices
de ambos proyectos de cliente, agregue el siguiente código para configurar la autenticación de cookies:Esto configura el middleware de cookies con el mismo nombre
Cookie
, establece el nombre de la cookie enSSO.Cookie
y configura las mismas opciones de seguridad.En el método
Configure
de ambos proyectos de cliente, agregue el siguiente código para habilitar el middleware de autenticación de cookies: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.