apache 尽管在授权标头中有Kerberos票证,但请求验证已验证的API仍被视为未经授权

snvhrwxg  于 2023-10-23  发布在  Apache
关注(0)|答案(1)|浏览(149)

我试图在Linux机器上调用托管在Apache Web服务器中的Flask API端点(http://monarch.example.com:8080/)。此终结点受IPSec身份验证保护。我使用kinit user来初始化dsp。然后,我使用python kernetlibrary来获取用于API调用的ticket和requests库。我在请求的Authorization头中提供票证。相关代码片段:

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

我已经检查了Authorization头是否填充了值。401-未授权的回应
/etc/apache2/sites-available/monarch.conf中包含端点的服务的配置为:

  1. <Directory /var/www/monarch>
  2. AuthType Kerberos
  3. AuthName "Acme Corporation"
  4. KrbAuthRealms EXAMPLE.COM
  5. KrbMethodNegotiate Off
  6. KrbSaveCredentials Off
  7. KrbVerifyKDC Off
  8. KrbMethodK5Passwd On
  9. # Krb5Keytab /etc/apache2/http.keytab
  10. Krb5keytab /etc/krb5.keytab
  11. Require user [email protected]
  12. </Directory>

最后,校长名单如下:

  1. host/[email protected]
  2. HTTP/[email protected]
  3. K/[email protected]
  4. kadmin/[email protected]
  5. kadmin/[email protected]
  6. krbtgt/[email protected]
  7. [email protected]
  8. root/[email protected]

来自/etc/krb5.keytab的密钥列表是:

  1. slot KVNO Principal
  2. ---- ---- ---------------------------------------------------------------------
  3. 1 2 host/[email protected]
  4. 2 2 host/[email protected]
  5. 3 2 HTTP/monarch.example.com@EXAMPLE.COM
  6. 4 2 HTTP/[email protected]

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

jgovgodb

jgovgodb1#

你试图发送一个“Negotiate”auth token,但你已经 * 禁用 * 了实际的方法-这就是KrbMethodNegotiate Off所做的。
您唯一启用的是“kpasswd”,即。HTTP基本身份验证,其中服务器仅针对HTTP KDC验证密码。(最重要的是,您甚至禁用了KrbVerifyKDC,缺少它会使密码检查受到微不足道的KDC欺骗攻击。
不要添加不必要的选项;你只需要Krb5Keytab
尽管在2023年,你可能不应该使用mod_auth_kerb。你应该使用mod_auth_gssapi
类似地,使用pyspnegopython-gssapi来代替python-kernetary;他们仍然使用相同的libgssapi,但他们有一个更令人愉快的Python API。(也可能不直接使用这些,使用requests-kerberosrequests-gssapiurllib-gssapihttpx-gssapi

相关问题