Как создать токен SPNEGO для отправки в заголовке HTTP из Kerberos TKT?

Я разрабатываю приложение, которое требует проверки подлинности с помощью прокси-сервера с помощью согласования. Пользователь может не иметь установленного клиента Kerberos. Я пытаюсь добиться этого с помощью библиотеки MIT Kerberos, чтобы избежать зависимости от платформы. Я успешно получил TKT с помощью krb5_get_init_creds_password и подтвердил его krb5_verify_init_creds. Теперь я хочу, чтобы не создавать токен SPNEGO для отправки в заголовке HTTP с использованием этого TKT. Может кто-нибудь сказать мне какой-либо API или метод для создания токена SPNEGO?

1 ответ

Решение

Вы можете использовать gss_init_sec_context для этой цели.

Немного предыстории:-

SPNEGO - это абстракция поверх Kerberos для связи по протоколу HTTP (которая, тем не менее, не использует контекст безопасности для шифрования)

Для этого сделайте следующее:-

  1. Теперь, когда у вас есть krb5_get_init_creds_password и вы получили учетные данные робота krb5, создайте кэш учетных данных в памяти с помощью krb5_cc_new_unique и затем инициализируйте его.

  2. Теперь используйте krb5_cc_store_cred, чтобы сохранить его в этом кеше

  3. Используйте gss_krb5_import_cred для получения токена GSSAPI

Теперь у вас есть вся необходимая предварительная информация. Все, что вам нужно сделать, это использовать gss_init_sec_context для создания входного токена.

Хорошая часть: последние библиотеки MIT Kerberos изначально поддерживают SPNEGO. Существует структура OID с именем gss_OID, которую вам нужно создать. Для SPNEGO это:

 static gss_OID_desc _gss_mech_spnego = { 6, (void *) "\x2b\x06\x01\x05\x05\x02" }; 

и затем передайте это в качестве аргумента gss_init_sec_context.

Если вы используете старую библиотеку MIT Kerberos, тогда я предлагаю вам использовать fbopenssl для этой цели. Вы можете проверить исходный код curl, чтобы проверить, как это делается.

Другие вопросы по тегам