Web应用程序Kerberos身份验证:与Cookie结合使用的正确方法是什么?

问题描述 投票:7回答:1

场景:

  • 企业,防火墙后的Python Web应用程序。
  • 应使用Kerberos对用户进行身份验证。
  • 我有工作代码从服务器(Negotiate标头等)发送正确的响应,并使用kerberos-sspi包获取访问应用程序的用户的Windows用户名

我对Kerberos的经验不多,但对Web应用程序有一些经验。

在我创建的其他使用内置用户数据库的Python Web应用程序中,身份验证流程通常如下:

  • 对于每个请求,检查请求是否具有包含用户标识的(签名)cookie(或某些变体 - 例如使用flask-login,其中用户标识存储在flask.session中)
  • 如果cookie存在,则正常响应。
  • 如果不存在此类cookie,请重定向到显示用户名/密码表单的/login/POST/login/验证正确的用户名/密码,设置安全cookie并重定向到?next=查询参数中指定的URL。

我的问题是:

  • 在经过Kerberos身份验证的Web应用程序中,身份验证流程是否类似?
  • 即我应该做以下事情: 对于每个请求,请检查请求是否包含包含用户ID的(已签名)cookie 如果cookie存在,则正常响应。 如果没有这样的cookie,则重定向到/login//login/做必要的东西来确定用户是谁(即发送Negotiate标头,使用kerberos_sspi查找用户名等),然后设置安全cookie并重定向到?next=查询参数中指定的URL。
  • 还是应该以其他方式处理?
windows http cookies kerberos
1个回答
1
投票

是的,您建议的流量似乎可行。

如果Kerberos说是,那么你可以首先登陆/login/执行Kerberos协商,并将用户重定向回会话。这甚至可以是后台的XMLHttpRequest,如果会话不再有效,则重定向到/login/。如果在后台检查会话,则cookie的生命周期可能比Kerberos令牌短得多,并且您在任何给定时间都无需担心有效会话。

如果会话不存在,请为该用户提供Kerberos和其他潜在的登录方法。

如果用户通过Kerberos具有有效会话,但没有用户配置文件,请将用户置备到应用程序中。在这里,您可以在现场轮询用户以获取更多信息,根据组和角色进行决策,或者将用户创建为具有一组默认权限,已知缺失值的存根,从而推迟该过程。

这一切都非常笼统。您应该在身份验证,授权和会计中查看您尝试将目标映射到AAA或AAA的内容。很明显,Kerberos正在进行身份验证,剩下的角色需要确定。

关于cookie:将任何身份验证转换为应用程序中的cookie确实很有意义。这样你以后可以在不改变整个应用程序的情况下在侧面添加一些其他SSO方法。

© www.soinside.com 2019 - 2024. All rights reserved.