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.

Autenticación REST de CAS 6.4 a un servicio externo – Falta la propiedad de identificación de tipo ‘@class’

Estoy tratando de reemplazar MongoAuthentication (cas-server-support-mongo) with RestAuthentication (cas-server-support-rest-authentication). Aquí está lo que logré hasta ahora:

  • Poder solicitar a CAS que llame a mi URI REST externa para autenticar al usuario.
  • Mi URI REST también puede devolver datos como lo requiere CAS. Aquí está el registro que obtuve. Parece estar bien en este paso.
2021-12-18 00:19:18,155 DEBUG [org.apereo.cas.adaptors.rest.RestAuthenticationHandler] 
- <Se ha recibido respuesta de autenticación REST:
[{"_class":"org.apereo.cas.authentication.principal.SimplePrincipal","id":"myemail@gmail.com","attributes":{}}]>

Aquí está el error que CAS arrojó

ERROR [org.apereo.cas.adaptors.rest.RestAuthenticationHandler] 
- <No se pudo resolver el subtipo de [tipo simple, clase org.apereo.cas.authentication.principal.Principal]:
propiedad de id de tipo faltante '@class'

Estoy bastante seguro de que mi respuesta REST tiene id

return {
    '@class': "org.apereo.cas.authentication.principal.SimplePrincipal",
    'id': 'myemail@gmail.com',
    'attributes': {}
}

Intenté con @class y _class. Ninguno de ellos funcionó en absoluto.

Finalmente, Cas dijo

No se pudo detectar el principal de autenticación para myemail@gmail.com

¿Podría por favor asesorarme amablemente sobre lo que olvidé?

Gracias,
Quang

Tags:  ,

Answer

  1. Avatar for davy.ai

    Solución

    El mensaje de error sugiere que la propiedad id en la respuesta no incluye una propiedad type id, la cual es requerida por el Serializador/Deserializador de Jackson para determinar el tipo del objeto.

    Puedes solucionar este problema agregando la propiedad type id a tu objeto de respuesta. Aquí está cómo debería lucir tu objeto de respuesta:

    {
        "@class": "org.apereo.cas.authentication.principal.SimplePrincipal",
        "@type": "SimplePrincipal",
        "id": "micorreo@gmail.com",
        "attributes": {}
    }
    

    Al agregar la propiedad @type con el valor del nombre de la clase, estás indicando al Serializador/Deserializador de Jackson qué tipo de objeto se está deserializando.

    Una vez que agregues la propiedad type id a tu objeto de respuesta, deberías poder autenticar usuarios usando el método de autenticación REST sin ningún problema.

    Espero que esto ayude. Hazme saber si tienes alguna otra pregunta.

Comments are closed.