如何在不命中数据库的情况下进行身份验证?

时间:2014-12-05 07:46:06

标签: rest authentication

{{}}}下方的评论最近引起了我的兴趣。为清楚起见,我将完整引用评论:

  

我的回答中没有任何内容暗示基于每个请求的数据库访问的解决方案,如果您认为这样做,那么您无法理解该规模的身份验证和授权。身份验证可以隐含在状态中,您认为facebook在其REST API的每个请求上都执行“数据库访问”吗?或谷歌这件事?提示:没有

我试着思考如何在不检查用户提供的值的情况下对集中控制的值进行身份验证,即使知道要向用户显示哪些数据,也是空白。我自愿承认,这是我未能理解那种规模的认证和授权。因此,我的问题是:像Facebook和Google这样的网站如何做到这一点?

1 个答案:

答案 0 :(得分:2)

一种方法是基于声明的身份验证。简化并略微松散地解释,归结为此;

  • 将未经身份验证的用户重定向到单独的身份验证服务器,而不是对用户本身进行身份验证的服务器应用程序。

  • 身份验证服务器以任何方式验证用户(登录+密码,证书,域成员资格等)并创建已签名的"文档"使用相关的用户信息(用户ID,名称,角色等)然后将用户重定向回服务器应用程序并附上文档。

  • 服务器应用程序验证文档的签名,如果它信任签名,它可以使用文档内容来假设用户是谁而不是访问数据库。

  • 通常,服务器应用程序将文档缓存在cookie /会话或类似内容中,以便下次访问应用程序时不必通过身份验证服务器退回。

通过这种方式,服务器应用程序无需关心如何用户的身份验证,只需信任验证服务器的判断。如果身份验证服务器(可能是客户端,除非它是浏览器)添加了Facebook登录支持,服务器应用程序将自动“只是工作”#34;使用新的登录类型。