我有一个具有名称、电子邮件和密码的User模型。
如果用户正常注册(通过表单),则使用passlib对存储在我的数据库中的密码进行哈希处理。然后,生成一个令牌并将其返回给用户的客户端。令牌是玩家id的序列化。要验证玩家,他只需使用基本身份验证的密码字段中的令牌登录,而我只需反序列化令牌并通过反序列化的id查找玩家。此外,玩家可以使用其密码来验证自己。
使用谷歌OAuth2的问题是,玩家不设置密码;他只向服务器发送谷歌验证令牌,服务器将令牌发送给谷歌并获取用户的电子邮件、姓名等。
如何为用户生成密码?我应该在这里做什么?
我现在对Google OAuth2用户注册的解决办法很简单:从Google获取用户信息,生成一个假密码(经过哈希处理),然后为用户生成身份验证令牌。然后,将伪造的密码替换为auth令牌(散列后的令牌)并将其作为用户的密码插入。然后将身份验证令牌返回给用户的客户端。
换句话说,auth令牌成为密码。现在我的身份验证令牌也不会过期。
显然,这是一个巨大的黑客攻击。这样做的正确方法是什么?我应该在每次用户需要验证自己的时候就ping Google吗?
发布于 2014-08-08 23:46:28
一种选择是要求用户在使用OAuth2后向您的站点注册,但这很愚蠢--您首先使用OAuth2来保存它。
我只是不会为这个用户保存密码。你为什么需要它呢?正如您所说的,他正在通过OAuth2进行身份验证,您需要ping OAuth2提供商来验证用户。
https://stackoverflow.com/questions/25191537
复制相似问题