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结合的正确方法是什么? 的相关文章

  • Angular2 中 Http 的 Promise 与 Observable? [复制]

    这个问题在这里已经有答案了 本质上 正如标题所说 是否有任何理由使用可观察的承诺 https stackoverflow com questions 37364973 angular 2 promise vs observable为了进行
  • 如何更改选项卡控件的名称

    我在 C WinForms 应用程序中使用选项卡控件 我想更改选项卡的标题 默认情况下它们是 tabPage1 tabPage2 等 一种无需代码即可实现的懒惰方法 选择选项卡控件 Go to properties use F4 to do
  • Windows7上python3.5无法安装BeautifulSoup4

    我已经从下载了 beautifulsoup4 4 5 3 tar gzhttps www crummy com software BeautifulSoup bs4 download 4 5 https www crummy com sof
  • 如何从任何进程关闭 Windows 上的套接字(ipv4 和 ipv6)连接?

    如何在 Windows 上关闭 tcp v4 和 tcp v6 连接 我不想终止具有开放连接的整个进程 因为这显然会将其他人踢出该进程 我需要从一个单独的进程执行此操作 因此无法访问套接字句柄等 我正在使用 Windows API 来获取
  • Windows 上的 Openssl 错误 0x02001005 和 0x2006D002?

    我正在尝试使用 openssl 将 cer 证书转换为 p12 证书 这是我正在使用的命令 C OpenSSL Win32 bin gt openssl x509 inform der in developer identity cer o
  • python+win32:检测窗口拖动

    有没有办法检测何时使用 python pywin32 在窗口中拖动不属于我的应用程序的窗口 我想对其进行设置 以便当我拖动标题与桌面边缘附近的图案匹配的窗口时 当松开鼠标时它会捕捉到边缘 我可以编写代码 以便在释放鼠标时将所有具有该标题的窗
  • 确定用于映射网络驱动器的域和用户名

    使用带有 SP1 的 Windows 7 Enterprise 但我希望得到适用于 Windows XP 2003 2008 Vista 7 的通用答案 从命令提示符处 我执行net use命令将 Z 驱动器映射到另一台计算机上的共享 但我
  • 使用 jquery 通配符检查 cookie 名称

    我有一个生成动态 cookie 的表单 例如 webform 62 1234356 62 1234356 可以是任意数字 我需要使用一些通配符检查来检查名称以 webform 开头的 cookie 是否存在 下面不起作用 if cookie
  • 如何解决内存碎片

    我们偶尔会遇到这样的问题 长时间运行的服务器进程 在 Windows Server 2003 上运行 由于内存分配失败而引发异常 我们怀疑这些分配由于内存碎片而失败 因此 我们一直在寻找一些可能对我们有帮助的替代内存分配机制 我希望有人能告
  • 从命令行运行 R 代码 (Windows)

    我在名为 analysis r 的文件中有一些 R 代码 我希望能够从命令行 CMD 运行该文件中的代码 而无需通过 R 终端 并且我还希望能够传递参数并在我的代码中使用这些参数 例如就像下面的伪代码 C gt execute r scri
  • 如何在Windows上分离“Git bash”中启动的“git gui”?

    例如 我开始 git bash 我导航到某个目录 I start git gui 我关闭控制台窗口或按 Ctrl C Git gui 的窗口消失了 即使我用过git gui disown 即使当我按 Ctrl C 时它不在前台 如何正确分离
  • Django 响应总是用 text/html 分块无法设置内容长度

    在我的Django应用程序的views py中 我在尝试设置以下HTTP标头字段后返回一个HttpResponse对象 Create a Response Object with the content to return response
  • 在 Cygwin 软件包列表中找不到 Openssl

    这里说的是https github com joyent node wiki Building node js on Cygwin Windows https github com joyent node wiki Building nod
  • 如何在Windows上模拟socket.socketpair

    标准Python函数套接字 套接字对 https docs python org 3 library socket html socket socketpair不幸的是 它在 Windows 上不可用 从 Python 3 4 1 开始 我
  • 有没有办法使用 ASP.NET 在用户离开页面时始终运行某些服务器端代码?

    我想知道当用户离开 ASP NET 中的页面时是否有任何方法可以始终运行一些服务器端代码 页面卸载事件不好 因为如果有人单击链接 则不会调用该事件 理想情况下 即使用户关闭浏览器 我也希望代码能够运行 我怀疑我所问的问题是不可能的 但问一下
  • 如何从Windows阻止社交媒体[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我想根据时间阻止我的电脑上的社交媒体 晚上 9 点后屏蔽 上午 11 点后解锁 如家长控制 我尝试过关注但失败了 创建了
  • 如何在批处理文件中回显换行符?

    如何从批处理文件输出中插入换行符 我想做类似的事情 echo hello nworld 这会输出 hello world Use echo hello echo echo world
  • 不在焦点时响应键盘? (C#、Vista)

    我正在尝试编写一个应用程序 只要按下 Shift 键 无论当前哪个应用程序具有焦点 它都会做出响应 我尝试过这个SetWindowsHookEx 与GetKeyboardState 但这两种方法仅在应用程序窗口具有焦点时才有效 我需要它在全
  • NodeJS Express Windows 最大连接数设置

    在哪里设置nodejs的最大连接数 用于使用express get 在 Windows 10 中 与linux中的最大文件 描述符 设置有关吗 有该设置的 Windows 版本吗 最好是在nodejs中进行设置 以便在迁移到unix时兼容
  • 将 CrashDumps 转储到应用程序运行所在的同一文件夹中

    我编写了一个应用程序 我希望对其进行一定程度的自动调试 我想使用 Windows 错误报告将故障转储输出到应用程序运行所在的同一文件夹中 我的想法是 我可以让我的应用程序在它自己的文件夹中查找任何 dmp 文件 然后根据需要上传它们进行分析

随机推荐