windows - Web 应用程序 Kerberos 身份验证 : Is the proper way to combine with cookies?

标签 windows http cookies kerberos

场景:

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

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

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

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

我的问题是:

  • 在 Kerberos 身份验证的网络应用程序中,身份验证流程是否相似?
  • 即我应该做以下事情吗:

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

最佳答案

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

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

如果 session 不存在,则为用户提供 Kerberos 和其他可能的登录方法。

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

这一切都非常笼统。您可能应该回顾一下您正在尝试将您的目标映射到 3A 或 AAA如身份验证、授权和计费。很明显,Kerberos 正在执行身份验证,其余角色需要确定。

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

关于windows - Web 应用程序 Kerberos 身份验证 : Is the proper way to combine with cookies?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54653735/

相关文章:

windows - 拦截窗口试图窃取 Windows 的全局焦点

windows - 使用Golang获取Windows认可的环境变量

c - 在 Windows 平台上使用 ANSI-C 可以获得精确到毫秒的系统时间吗?

http - 最适合用于过期登录的 HTTP 状态(基于表单的登录)

javascript - jQuery 单击事件在 Firefox 中根本不起作用

file - 在 Electron 中保存用户数据的正确方法

c# - 清除 WebView 中的所有 cookie

python - 在 python 3.5 中,当使用参数列表作为 subprocess.Popen() 的输入时,我无法获得正确的 len(sys.argv)

internet-explorer - IE 或 Edge Print 对话框在没有 session 的情况下向服务器发送请求(因为 session cookie 上的 SameSite=Lax)

json - 无法存储从外部服务器获取的 json 数据