如何在 Python 应用程序中建立与 Kerberos 的连接?

Nur*_*bek 2 python kerberos active-directory flask django-rest-framework

我有任务创建SSO的(单点登录)的授权Python后端应用程序的帮助下KerberosActive Directory

换句话说,前端应用程序对后端应用程序的特定 URL 发出 AJAX GET 请求。该后端应用程序必须以 JSON 格式返回有关员工的信息。

到目前为止我做了什么:

1)SPN后端应用程序的名称是在Active Directory.

2)krb5.keytab后端应用程序的文件已创建。

3) 位于远程 Windows 服务器上的 Active Directory 和 Kerberos 服务器。

4) 后端应用程序将在 Linux Docker 容器中。

5) 我将 Kerberos 客户端安装到 Docker 容器。

6) Kerberos 领域:SERVICE.LOCAL.

7) KDC 服务器的主机名:CS001, CS002, CS003.

你有没有在 Python 中看到上述过程的任何实现?我将不胜感激任何帮助。

Joh*_*n B 5

您有 2 种方法来处理此问题:

  1. 直接用Python处理
  2. 在 apache 或 nginx 等代理中处理

纯 Python 解决方案

如果您没有代理或只想在 python 中处理它,我建议使用python-gssapi library这是一个代码示例。还有其他 Python 绑定,但从我的阅读来看,这个绑定似乎是最完整的。

请注意,如果您以这种方式处理它,您的 Python 服务器可能需要能够尊重 keep-alive 标头(即对多个请求重复使用相同的连接)。这严格来说并不是 SPENGO 协议的一部分,但大多数浏览器似乎都要求服务器实现它。

代理解决方案

如果您使用的是 apache,则可以使用mod_auth_kerb模块,该模块有详细记录。还有一个mod_auth_gssapi提供了类似的功能。

对于 nginx,有一个类似的模块可用。

对于这些代理解决方案中的任何一个,其想法是代理处理 Kerberos 身份验证,并为您的 Python 应用程序设置REMOTE_USER 环境变量。因此,您的 Python 应用程序需要能够接受此变量作为经过身份验证的用户。Django有专门用于此目的的中间件 - 我不确定Flask(我提到这两个框架是因为它们在您问题的标签中)。