Lo siento... Quiero reformular completamente esta pregunta: y he preguntadola misma preguntasobre Seguridad de la Información ahora
El sistema en el que estoy trabajando tendrá una aplicación móvil, un portal web y una API basada en HTTP.
La pregunta a la que parece que no puedo encontrar una respuesta:
¿Necesito implementar los puntos finales de token openid connect y/o oauth y generar tokens para que el cliente acceda?miAPI? ¿O "de alguna manera" habilito a los clientes para acceder a la API utilizando tokens emitidos por el proveedor de ID abierta del usuario?
Más antecedentes:
Quiero permitir que los usuarios puedan registrarse e iniciar sesión utilizando sus ID de Google/Facebook.
Dentro de la API almaceno una tabla de usuarios con algunos atributos, mínimos porque no necesito más que esto, pero esencialmente:
Usuarios de la tabla:
- uid
- nombre_real
- número_contacto
- dirección_correo electrónico
- is_active
- have_admin_rights
También configuraría una tabla para los identificadores abiertos de los usuarios, como esta:
Tabla open_ids:
- uid
- user_id (Referencias usuarios(uid)
- open_id
(para que un usuario pueda usar cualquiera de sus Open-ID que quiera asociar con su cuenta)
En otros lugares hago referencia a la identificación del usuario, por ejemplo:
Tabla foo:
- uid
- bar
- bla
- last_modified_by_user_id (Referencias usuarios (uid))
Actualmente, en mi configuración de prueba, tengo una tabla de "contraseñas", por ejemplo:
Contraseñas de tabla:
- uid
- user_id (Referencias usuarios (uid))
- contraseña_hash
(Nota: la idea es deshacernos de esta tabla pronto y usar open_id en su lugar. Pero las bibliotecas que elijo dependen en gran medida de la funcionalidad que implemento y de lo que uso de fuentes externas)
Deduzco que necesito almacenar los tokens de acceso, ya que preferiría no duplicar los datos de los usuarios que ya están en sus perfiles de servicios sociales y necesito acceder a esos servicios para cada usuario de vez en cuando. Pero, ¿cómo obtengo el token de acceso del Cliente (donde el usuario se registró) a la API (que es el recurso compartido entre los distintos clientes)?
En realidad, el problema no es tanto enviar el token del cliente a la API; simplemente puedo tener una función en la API para "registrar" a un usuario y algunos otros puntos finales para cuando se autentica a un usuario. El problema es que un token de acceso está destinado a un solo cliente específico.
Suponiendo que NO implemento un servidor de autorización y de alguna manera puedo usar los servicios de Google, etc.: en los sitios de desarrolladores, por ejemplo, para Google, Facebook, puedo registrar mi cliente y recibir el secreto de cliente/ID de cliente, pero ¿luego uso ¿Las mismas credenciales de cliente tanto del cliente como de la API?
¿O tal vez la API solo conserva las credenciales del cliente y el servicio de front-end depende de la API como paso intermedio cuando un usuario se registra? Esto parece terriblemente peligroso para ser inseguro. Entonces, ¿es la API otro cliente independiente a los ojos del proveedor de OpenID?
Suponiendo que necesito implementar un servidor de autorización, ¿debo ser también un proveedor de identificación abierta? Parece que en este caso tendría que ser openid-connect porque necesito tener autenticación Y autorización. Pero en este caso estoy realmente perdido en términos de cómo realizar el registro de un nuevo usuario, y las preguntas anteriores realmente no desaparecen. Parecería que debería poder permitir que el cliente se conecte y obtenga la autenticación/acceso del usuario y los tokens de identificación del Open IdP y luego "registrar" al usuario con la API.