RaiBnod
Necesito hacer que el usuario mantenga el inicio de sesión en el sistema si el usuario access_token
caduque y el usuario quiera mantener el inicio de sesión. ¿Cómo puedo obtener una nueva actualización? access_token
con el uso de refresh_token
en Capa de llaves?
estoy usando vertx-autorización para la implementación de autenticación con Capa de llaves en vert.x. ¿Es posible actualizar access_token
con vertx-autorización o Capa de llaves¿La propia API REST? ¿O cuál será otra implementación de esto?
Yogendra Mishra
keycloak tiene API REST para crear un access_token
usando refresh_token
. Es un POST endpoint with application/x-www-form-urlencoded
Así es como se ve:
Method: POST
URL: https://keycloak.example.com/auth/realms/myrealm/protocol/openid-connect/token
Body type: x-www-form-urlencoded
Form fields:
client_id : <my-client-name>
grant_type : refresh_token
refresh_token: <my-refresh-token>
Esto le dará un nuevo token de acceso usando el token de actualización.
NOTA: si su token de actualización ha caducado, arrojará una excepción 400 en la que puede hacer que el usuario inicie sesión nuevamente.
Echa un vistazo a una muestra en Postman, puedes desarrollar una API correspondiente usando esto.
-
Intenté esto con
2.5.4
y aún requiere el secreto del cliente para esta solicitud. Sin embargo, ahora tiene sentido por qué se requerirá el secreto del cliente si se proporciona el token de actualización.– rrocky
13 de diciembre de 2018 a las 6:42
-
El secreto del cliente solo es necesario si se trata de un confidencial cliente. Público los clientes no requieren el secreto del cliente.
– rrocky
13 de diciembre de 2018 a las 8:45
-
¿Alguien puede explicar por qué se requiere el secreto del cliente al actualizar un token para un cliente confidencial?
– Kimble
21 de diciembre de 2018 a las 8:42
-
@all, ¿por qué el token de actualización tiene formato jwt? sin estado pero Google y auth0 usan estado.
– Panup Pong
12 sep 2019 a las 10:51
-
@kimble cliente confidencial en Keycloak está destinado a aplicaciones de servidor, donde almacenar un secreto de cliente es seguro. Echa un vistazo a los documentos (aquí)[keycloak.org/docs/6.0/server_admin/#oidc-clients]
– negro
20 de agosto de 2020 a las 20:09
@maslick es correcto, también debe proporcionar el secreto del cliente, no es necesario un encabezado de autorización en este caso:
http://localhost:8080/auth/realms/{realm}/protocol/openid-connect/token
En caso de token de actualización caducado, devuelve:
Si no agrega el secreto, obtiene 401 no autorizado aunque el token de actualización sea correcto
-
Acabo de probarlo, solo necesita el secreto del cliente si el cliente que emitió el token es confidencial
– Mateo
19 de agosto de 2021 a las 0:35
Probé con 4.8.2.Final, da lo siguiente unauthorized_client
incluso con token de acceso previo como ‘Bearer’. Entonces probé con Basic YXBwLXByb3h5OnNlY3JldA==
en el encabezado de autorización. Luego funcionó, pero aún no estoy seguro de estar haciendo lo correcto.
-
Para los encabezados de autorización, todo se reduce a lo que el servidor busca en el valor del encabezado. Si esto funciona, probablemente no estés equivocado.
– charliebeckcon
28 de enero de 2019 a las 5:45
-
Probablemente esté utilizando un cliente confidencial, por lo que debe incluir
client_secret
en la solicitud– maslick
8 de febrero de 2019 a las 15:12
-
¿Por qué alguien querría usar un token de actualización si tengo que pasar client_secret para un cliente confidencial? En mi opinión, Keycloak debería devolver access_token simplemente pasando client_id y refresh_token ya que actúa como un secreto.
– ganesan arunachalam
20 mayo 2020 a las 13:30
Ampliando la respuesta de Yogendra Mishra. Tenga en cuenta que
client_id
y client_secret
también se puede enviar en el encabezado de Autorización.
Authorization: Basic ${Base64(<client_id>:<client_secret>)}
Esto funciona tanto para la llamada de token inicial (sin token de actualización) como para la llamada de token de actualización a /openid-connect/token
punto final
Referencia:
https://developer.okta.com/docs/reference/api/oidc/#client-secret