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

2024-01-20

场景:

  • 一个位于防火墙后面的企业 Python Web 应用程序。
  • 应使用 Kerberos 来验证用户身份。
  • 我有工作代码,可以从服务器发送正确的响应(Negotiateheader 等)并获取访问该应用程序的用户的 Windows 用户名,使用kerberos-sspi package

我对 Kerberos 没什么经验,但对 Web 应用程序有一些经验。

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

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

我的问题是:

  • 在 Kerberos 身份验证的 Web 应用程序中,身份验证流程是否类似?
  • IE。我应该执行以下操作:

    • 对于每个请求,检查该请求是否具有包含用户 ID 的(签名)cookie
    • 如果cookie存在,则正常响应。
    • 如果不存在这样的cookie,则重定向到/login/. /login/执行必要的操作来确定用户是谁(即发送Negotiate标头,使用kerberos_sspi查找用户名等),然后设置安全 cookie 并重定向到中指定的 URL?next=查询参数
  • 还是应该以其他方式处理?


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

您可以执行 Kerberos 协商作为登陆的第一件事/login/如果 Kerberos 同意,则将用户重定向回会话。这甚至可以是后台的 XMLHttpRequest 并重定向到/login/如果会话不再有效。如果在后台检查会话,则 cookie 的生命周期可能比 Kerberos 令牌显着缩短,并且您在任何给定时间都无需担心有效会话。

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

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

这一切都很一般。您可能应该回顾一下您正在尝试将您的目标与 3A 或AAA https://searchsecurity.techtarget.com/definition/authentication-authorization-and-accounting如身份验证、授权和计费。很明显,Kerberos 正在执行身份验证,其余角色需要确定。

关于 cookie:将任何身份验证转换为应用程序上的 cookie 确实有意义。这样您以后就可以在侧面添加一些其他 SSO 方法,而无需更改整个应用程序。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Web应用程序Kerberos身份验证:与cookie结合的正确方法是什么? 的相关文章

随机推荐