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.

¿Es posible desconectar a un usuario en IdentityServer4 como un usuario diferente?

El flujo que estoy intentando entender es el siguiente:
1) El usuario A inicia sesión en el cliente A
2) El cliente A redirige al Servidor de Identidad para autenticar al usuario
3) después de la autenticación, el cliente A gestiona la información del usuario en su propio sistema
4) El usuario A resulta ser un “actor malintencionado”
5) El usuario Admin accede a la Herramienta de Administración de IdentityServer (una aplicación cliente diferente para gestionar IdentityServer, incluidos los usuarios).
6) El usuario Admin realiza una acción para “revocar” al usuario A
7) Se realiza una llamada a la parte trasera del IdentityServer desde la herramienta de administración donde el usuario A tiene una propiedad “Habilitado” que se establece en falso.

En este punto del flujo, quiero sacar al usuario del cliente A desde la parte trasera del IdentityServer.

Más contexto:
IdentityServer utiliza cookies en el navegador del cliente para mantener la “sesión” (no estoy seguro si esa es la palabra correcta porque en realidad no se está gestionando ningún estado).
También utiliza cookies para la opción de “recordarme”.

¿Hay alguna forma de eliminar la cookie del IdentityServer desde la parte trasera? ¿O notificar al cliente que el usuario A ya no tiene una autenticación válida para que pueda realizar HttpContext.SignOutAsync()?

Estaba revisando este enlace: para obtener orientación, pero estoy atrapado en cómo hacer esto desde la parte trasera como usuario Admin. Llamar a HttpContext.SignOutAsync() cerraría la sesión del usuario Admin que realizó la solicitud, no del usuario A que está causando problemas en el cliente A.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para expulsar a UserA de ClientA desde el back-end de IdentityServer, se puede utilizar el punto final de cierre de sesión de IdentityServer. Este punto final se utiliza para iniciar el proceso de cierre de sesión del cliente y se puede llamar desde el back-end de IdentityServer.

    Para utilizar el punto final de cierre de sesión, es necesario hacer una solicitud POST al punto final de cierre de sesión de IdentityServer con el ID de sesión del usuario, el ID de cliente y la URL de redireccionamiento. El ID de sesión se almacena típicamente en una cookie en el navegador del usuario, y el ID de cliente y la URL de redireccionamiento deben ser proporcionados por ClientA.

    Una vez que se llama al punto final de cierre de sesión, IdentityServer borrará la sesión del usuario y eliminará cualquier cookie asociada. Luego, ClientA debería redireccionar al usuario a su propia página de inicio de sesión o a otra página apropiada.

    Aquí hay un ejemplo de fragmento de código que demuestra cómo llamar al punto final de cierre de sesión en C#:

    var endpoint = $"{identityServerBaseUrl}/connect/endsession";
    var sessionId = HttpContext.Request.Cookies["session-id"];
    var clientId = "ClientA"; // Reemplazar con el ID real del cliente
    var redirectUrl = "https://clienta.com/signout"; // Reemplazar con la URL de redirección real
    
    var httpClient = new HttpClient();
    var formContent = new FormUrlEncodedContent(new[]
    {
        new KeyValuePair<string, string="">("id_token_hint", sessionId),
        new KeyValuePair<string, string="">("post_logout_redirect_uri", redirectUrl),
        new KeyValuePair<string, string="">("client_id", clientId),
    });
    
    var response = await httpClient.PostAsync(endpoint, formContent);
    

    Tenga en cuenta que este código asume que el ID de sesión se almacena en una cookie llamada “session-id”. Es posible que necesite ajustar este código según su escenario específico.

    Alternativamente, si desea notificar a ClientA que UserA ya no debe tener una autenticación válida para que pueda realizar HttpContext.SignOutAsync(), puede utilizar un punto final de revocación de token. IdentityServer proporciona un punto final de revocación de token que se puede utilizar para revocar el token de un usuario.

    Para utilizar el punto final de revocación de token, es necesario hacer una solicitud POST al punto final de revocación de token con el token de acceso o el token de actualización del usuario, la pista de tipo de token y las credenciales del cliente.

    Aquí hay un ejemplo de fragmento de código que demuestra cómo llamar al punto final de revocación de token en C#:

    var endpoint = $"{identityServerBaseUrl}/connect/revocation";
    var token = "Token de acceso o token de actualización de UserA"; // Reemplazar con el token real
    var tokenTypeHint = "access_token"; // Reemplazar con "refresh_token" si se utiliza un token de actualización
    var clientId = "ClientA"; // Reemplazar con el ID real del cliente
    var clientSecret = "Secreto de ClientA"; // Reemplazar con el secreto real del cliente
    
    var httpClient = new HttpClient();
    var formContent = new FormUrlEncodedContent(new[]
    {
        new KeyValuePair<string, string="">("token", token),
        new KeyValuePair<string, string="">("token_type_hint", tokenTypeHint),
        new KeyValuePair<string, string="">("client_id", clientId),
        new KeyValuePair<string, string="">("client_secret", clientSecret),
    });
    
    var response = await httpClient.PostAsync(endpoint, formContent);
    

    Tenga en cuenta que este código asume que tiene acceso al token de acceso o al token de actualización de UserA. Es posible que necesite ajustar este código según su escenario específico. Además, tenga en cuenta que revocar un token afectará a todos los clientes que estén utilizando el token, no solo a ClientA.</string,></string,></string,></string,></string,></string,></string,>

Comments are closed.