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

时间:2019-04-12 19:38:38

标签: python flask django-rest-framework active-directory kerberos

我的任务是借助SSOPythonKerberos后端应用程序中创建Active 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中看到上述过程的任何实现?我将不胜感激。

1 个答案:

答案 0 :(得分:1)

您可以通过以下两种方式处理此问题:

  1. 直接在Python中处理
  2. 在诸如apache或nginx的代理中处理它

纯Python解决方案

如果您没有代理,或者只是想使用python处理它,建议您使用python-gssapi libraryHere's a code sample。还有其他Python绑定,但是根据我的阅读,这似乎是最完整的。

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

代理解决方案

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

对于nginx,有a similar module可用。

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