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.

Cómo obtener un token de actualización después de autenticar a través de la aplicación Flutter con PKCE utilizando Keycloak usando openid_client?

Tengo la siguiente configuración del cliente KeyCloak, para usar el flujo de autenticación pkce:

Reino: REALM

ID del cliente: pkce-client
Protocolo del cliente: openid-connect
Tipo de acceso: público
Flujo estándar habilitado: ACTIVADO
URL de redireccionamiento válida: http://localhost:4200/

Configuración avanzada:
Método del desafío de código para el intercambio de código de clave de prueba: S256

Cuando autentico con la aplicación Flutter con el simulador de iOS a través de openidcliente
https://pub.dev/packages/openid
cliente así:

autenticar() async {

var uri = Uri.parse('http://$localhost:8180/auth/realms/REALM');
var clientId = 'pkce-client';
var scopes = List<String>.of(['profile', 'openid']);
var port = 4200;

var issuer = await Issuer.discover(uri);
var client = new Client(issuer, clientId);

urlLauncher(String url) async {
    if (await canLaunch(url)) {
        await launch(url, forceWebView: true);
    } else {
        throw 'No se pudo abrir $url';
    }
}

var authenticator = new Authenticator(
    client,
    scopes: scopes,
    port: port,
    urlLancher: urlLauncher,
);

var auth = await authenticator.authorize();
var token= await auth.getTokenResponse();
return token;

}

Obtengo la siguiente respuesta:
enter image description here

¿Cómo puedo obtener un nuevo token de acceso con el token de actualización?

He intentado:

POST http://localhost:8180/auth/realms/REALM/protocol/openid-connect/token
Content-Type: application/x-www-form-urlencoded
client_id: pkce-client
grant_type: refresh_token
refresh_token: “token de actualización recibido”

Pero obtengo:

{“error”:”invalid_client”,”error_description”:”Credenciales inválidas del cliente”}

¿Cómo debo preparar la solicitud para refrescar el token de acceso?

Gracias de antemano

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para actualizar el token de acceso utilizando el token de actualización en Keycloak, es necesario incluir el secreto del cliente en la solicitud. Modifique su solicitud para incluir el parámetro client_secret con el valor del secreto del cliente del cliente pkce-client:

    POST http://localhost:8180/auth/realms/REALM/protocol/openid-connect/token
    Content-Type: application/x-www-form-urlencoded
    
    client_id=pkce-client
    client_secret=<valor_secreto_cliente>
    grant_type=refresh_token
    refresh_token=<token_actualización_recibido>
    

    Reemplace <valor_secreto_cliente> por el valor real del secreto del cliente del cliente pkce-client, y <token_actualización_recibido> por el valor real del token de actualización recibido en la solicitud de autenticación inicial.

    Con esta modificación, la solicitud debería devolver un nuevo token de acceso que puede ser utilizado para futuras solicitudes.</token_actualización_recibido></token_actualización_recibido>

Comments are closed.