【问题标题】:How to set up a connection with Kerberos in Python application?如何在 Python 应用程序中建立与 Kerberos 的连接?
【发布时间】:2019-09-03 14:53:00
【问题描述】:

我有任务在Python 后端应用程序中创建SSO(单点登录)授权,并借助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 中看到过上述过程的任何实现?如有任何帮助,我将不胜感激。

【问题讨论】:

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


    【解决方案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 环境变量。因此,您的 python 应用程序需要能够接受此变量作为经过身份验证的用户。 Django 有专门用于此目的的中间件 - 我不确定 Flask (我提到这两个框架是因为它们在您问题的标签中)。

    【讨论】:

    • 您好!谢谢您的回答。我有另一个问题。如果请求来自前端应用程序而不是浏览器,您推荐的第一个解决方案是否有效?在我的例子中,用户将通过前端应用程序进行交互。据我所知,浏览器应该只是读取员工机器上的凭证缓存,同时我认为我们不能通过 axios(ajax)请求将所有凭证缓存从前端应用程序发送到后端应用程序。我在这部分有点困惑。
    • 我在上一条评论中描述的情况与我认为的post类似。
    • 抱歉,我阅读了“AJAX”并假设为“浏览器”。无论请求是来自浏览器还是其他东西,服务器端解决方案都是相同的。但看起来您需要了解如何与 Axios 中的 Kerberos 客户端库进行交互。恐怕我对此了解不多。基本上,您需要一种从客户端凭据生成 base64 令牌的方法,然后在 Authenticate 标头中发送此令牌。 python-gssapi 有如何在 python 中执行此操作的示例 - 这应该说明需要发生什么。然后你需要了解如何在 Axios 中进行等效操作。
    • 也许这会有所帮助? stackoverflow.com/questions/20098912/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 2020-08-02
    • 2018-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多