尽管授权标头中有 kerberos 票证,但对经过 Kerberos 身份验证的 API 的请求仍被视为未经授权

问题描述 投票:0回答:1

我正在尝试调用 Linux 计算机中 Apache Web 服务器中托管的 Flask API 端点 (http://monarch.example.com:8080/)。该端点受 Kerberos 身份验证保护。我使用

kinit user
来初始化 Kerberos。然后我使用 python kerberos 库来获取 api 调用的票证和请求库。我在请求的授权标头中提供票证。相关代码片段:

`__, krb_context = kerberos.authGSSClientInit("[email protected]")
kerberos.authGSSClientStep(krb_context, "")
auth_header = ("Negotiate " + kerberos.authGSSClientResponse(krb_context))
headers = {"Authorization": auth_header}`

我已检查授权标头是否填充了值。 但是我收到 401-unauthorized 作为响应。

包含端点的服务的

/etc/apache2/sites-available/monarch.conf
的 Kerberos 配置为:

<Directory /var/www/monarch>
       AuthType Kerberos
       AuthName "Acme Corporation"
       KrbAuthRealms EXAMPLE.COM
       KrbMethodNegotiate Off
       KrbSaveCredentials Off
       KrbVerifyKDC Off
       KrbMethodK5Passwd On
       # Krb5Keytab /etc/apache2/http.keytab
       Krb5keytab /etc/krb5.keytab
       Require user [email protected]
</Directory>

最后,校长名单是:

host/[email protected]
HTTP/[email protected]
K/[email protected]
kadmin/[email protected]
kadmin/[email protected]
krbtgt/[email protected]
[email protected]
root/[email protected]

/etc/krb5.keytab
的按键列表是:

slot KVNO Principal
---- ---- ---------------------------------------------------------------------
   1    2     host/[email protected]
   2    2     host/[email protected]
   3    2     HTTP/[email protected]
   4    2     HTTP/[email protected]

我已经被这个问题困扰了几天了。如果有人能在这方面帮助我,那就太好了。

apache flask kerberos
1个回答
0
投票

您正在尝试发送“协商”身份验证令牌,但您已经禁用了实际方法 – 这就是

KrbMethodNegotiate Off
所做的。

您唯一启用的是“kpasswd”,即 HTTP 基本身份验证,其中服务器仅根据 Kerberos KDC 验证密码。 (最重要的是,您甚至禁用了 KrbVerifyKDC,缺少该功能会使密码检查受到微不足道的 KDC 欺骗攻击。)

不要添加不必要的选项;您所需要的只是

Krb5Keytab

尽管在 2023 年,您通常不应该使用 mod_auth_kerb。您应该使用 mod_auth_gssapi


类似地,使用 pyspnegopython-gssapi 代替 python-kerberos;他们仍然使用相同的 libgssapi 底层,但他们有一个更令人愉快的 Python API。 (也许也不要直接使用它们 – 使用 requests-kerberosrequests-gssapiurllib-gssapihttpx-gssapi。)

© www.soinside.com 2019 - 2024. All rights reserved.