Estoy refactorizando para un cliente una aplicación que debe admitir OpenID, Facebook Connect y autenticación personalizada (correo electrónico + contraseña). Supongamos que tengo:La mejor manera de admitir el inicio de sesión múltiple en App Engine
class MyUser(db.Model):
pass
class Item(db.Model):
owner = db.ReferenceProperty(MyUser)
Estaba pensando implementar diferentes sistemas de autenticación de esta manera:
class OpenIDLogin(db.Model): # key_name is User.federated_identity()? User.user_id()?
user = db.ReferenceProperty(MyUser)
class FacebookLogin(db.Model): # key_name is Facebook uid
user = db.ReferenceProperty(MyUser)
class CustomLogin(db.Model): # key_name is the user email
user = db.ReferenceProperty(MyUser)
password = db.StringProperty()
¿Hay una solución mejor? Ya hay una respuesta here pero no puedo entender si esa es la solución correcta para mí. Ya he desarrollado una aplicación usando la API de usuarios y otra que usa Facebook Connect en el pasado, así que sé cómo manejar ambas, el problema es unirlas. Cambiar a otro marco no es una opción lamentablemente.
Facebook ahora usa una versión preliminar de OAuth 2.0, que depende de https para mayor seguridad. Cuidado: el servicio de obtención de URL de App Engine actualmente no valida los certificados https, lo que significa que su aplicación será vulnerable a los ataques de envenenamiento de DNS y de "hombre en el medio"; potencialmente exponiendo tus claves secretas de Facebook. Tendrás que decidir por ti mismo si crees que alguien podría montar tal ataque en las máquinas de captación de URL de Google y si esa fuga de clave secreta es aceptable. –
Esto está en mi hoja de ruta en un par de meses, así que agradecería una respuesta también. – mjhm
@Forest. Gracias por el aviso. Si entiendo correctamente, la amenaza potencial de la que está hablando se encuentra entre los servidores de GAE y los servidores de Facebook. Esta no es una amenaza "Starbucks WiFi" de nivel de usuario. ¿Es eso correcto? – mjhm