HTTP-запрос аутентификации с кешем Kerberos ⇐ Python

Программы на Python
Anonymous
HTTP-запрос аутентификации с кешем Kerberos

Сообщение Anonymous »

У меня есть несколько файлов кэша Kerberos для каждого пользователя YARN. Я хочу использовать YARN REST API, чтобы получить некоторую информацию о выполняемых заданиях, которые обрабатывает мой пользователь.
Я пробовал использовать Request_kerberos разными способами, но не удалось:

Код: Выделить всё

from requests_kerberos import HTTPKerberosAuth
auth = HTTPKerberosAuth()
requests.get("https://yarn-hostname:443/gateway/yarn_gateway_realm/yarn/ws/v1/cluster/apps?user=some_specific_user, verify=False, auth=auth)
Это приводит к статусу 401.

Код: Выделить всё

from requests_kerberos import HTTPKerberosAuth
from spnego import KerberosCCache
auth = HTTPKerberosAuth(principal=KerberosCCache(ccache="/path/to/my_user/cache"))
requests.get("https://yarn-hostname:443/gateway/yarn_gateway_realm/yarn/ws/v1/cluster/apps?user=some_specific_user, verify=False, auth=auth)
Это приводит к статусу 401.

Код: Выделить всё

from requests_kerberos import HTTPKerberosAuth
environ["KRB5CCNAME"] = "/path/to/my_user/cache"
auth = HTTPKerberosAuth()
requests.get("https://yarn-hostname:443/gateway/yarn_gateway_realm/yarn/ws/v1/cluster/apps?user=some_specific_user, verify=False, auth=auth)
Это приводит к статусу 401.
Also tried generating a authorization key:

Код: Выделить всё

import krb5
import requests
import spnego
import base64

def generate_kerberos_auth_header(cache_file: str, url: str):

client = spnego.client("HTTP/my-yarn-hostname.com@MYREALM", credentials=[spnego.KerberosCCache(ccache=cache_file)])

in_token = None
out_token = client.step(in_token)

auth_header = f'Negotiate {base64.b64encode(out_token).decode()}'
print(f"auth_header={auth_header}")
return auth_header

def send_request_with_kerberos(url: str, cache_file: str):

headers = {
'Authorization': generate_kerberos_auth_header(cache_file, url)
}

response = requests.get(url, headers=headers)
return response
Это вызывает ошибку: spnego.Exceptions.BadMechanismError: SpnegoError (1): SpnegoError (16): операция не поддерживается или недоступна. Контекст: не указано имя пользователя или пароль и кэш учетных данных. не существовал или не содержал учетных данных. Контекст: невозможно согласовать общий механизм
Я уже подтвердил, что файл кэша существует и имеет рабочие учетные данные с неистекшим сроком действия, используя klist .
Есть ли какой-нибудь способ добиться того, чего я пытаюсь сделать?

Подробнее здесь: https://stackoverflow.com/questions/790 ... eros-cache

Вернуться в «Python»