El inicio de sesión de Apple, el método de autorización devuelve el nombre solo la primera vez

Aug 20 2020

Implementando el inicio de sesión de Apple en una aplicación web (ASP.NET a la antigua, pero no importa, la pregunta puede tratarse como un simple HTML/JS POC), llamando al método de autorización en el punto final de Apple:

https://appleid.apple.com/auth/authorize?client_id=...&redirect_uri=...&response_type=code%20id_token&state=...&response_mode=form_post&scope=name%20email

Quiero obtener el nombre y apellido del usuario. El método devuelve algo como esto: {

   "state": "xxx",
   "code": "yyy",
   "id_token": "zzz",
   "user": {
        "name": {
            "firstName":"John",
            "lastName":"Doe"
        },
        "email":"[email protected]"
    }
}

id_token es JWT que consiste en el ID de Apple y el correo electrónico del usuario, no hay datos sobre el nombre o apellido.

Como puede ver, puedo obtener nombre y apellido de la propiedad del usuario . Esa es la única manera conocida por mí.

El problema es que Apple devuelve estos datos solo la primera vez que los solicito. No es un error, es una característica:https://developer.apple.com/documentation/sign_in_with_apple/sign_in_with_apple_js/configuring_your_webpage_for_sign_in_with_apple:

Importante

Apple solo devuelve el objeto de usuario la primera vez que el usuario autoriza la aplicación. Conserva esta información desde tu aplicación; las solicitudes de autorización posteriores no contendrán el objeto de usuario.

Así que almaceno estos datos para más adelante en el flujo de trabajo, los almacenaré en la base de datos.

Ahora mi problema/pregunta:

Cuando el usuario elimina su cuenta, elimino todos sus datos de db (tengo que hacerlo, debido al contrato, la ley, etc.).

Cuando el usuario se registra nuevamente a través del inicio de sesión de Apple, hago ping al punto final de Apple y ya no obtengo los datos del usuario (incluidos el nombre y el apellido) (¡debido a la política de Apple citada anteriormente)!

¿Qué debo hacer para conseguirlo?

Respuestas

3 AnkitMishra Aug 28 2020 at 09:57

Estoy haciendo la parte de back-end de inicio de sesión de Apple, me enfrenté a un problema similar.

Para iOS 13+

  • SDK proporciona el uuid, el correo electrónico y el nombre del usuario de Apple para la primera solicitud de autorización.
  • Estamos mapeando este apple_user_uuid único con los detalles del perfil en la base de datos. (En caso de fallas en la solicitud, puede pedirle al back-end que lo ponga en cola y la aplicación debe mantenerlo en caché hasta que la llamada al back-end sea exitosa).

Para ANDROID/WEB Flow/IOS por debajo de 13

  • Por primera vez en la devolución de llamada de Apple, nos envía el nombre con un código de un solo uso (caducidad de 5 minutos).

  • Usando este código cuando llamamos a la API de token, nos proporciona id_token JWT.

  • En token, el asunto es apple_user_uuid.

  • Persiste en la misma mesa.

Así que ahora en el back-end siempre tendrá correo electrónico, nombre, apellido etiquetados con apple_user_uuid, que permanece constante para una identificación de Apple.

Y no elimine esta asignación si el usuario elimina su cuenta. Hasta que Apple proporciona una solución.