我正在开发一个应用程序,该应用程序需要使用协商与代理进行身份验证。用户可能没有安装Kerberos客户端。我正在尝试使用MIT Kerberos库来实现这一点,以避免平台依赖性。我已经使用krb5_get_init_creds_password成功地获得了TKT,并验证了它krb5_verify_init_cred。现在我想使用这个TKT创建要在HTTP标头中发送的SPNEGO令牌。有人能告诉我任何API或方法来创建SPNEGO令牌吗?
您可以为此目的使用gss_init_sec_context。
一些背景:-
SPNEGO是kerberos之上的一个抽象,用于基于HTTP的通信(不过它不使用加密的安全上下文(
对于此pupose,请执行以下操作:-
-
现在您已经有了krb5_get_init_creds_password并获得了krb5-mech凭据,使用krb5_cc_new_unique创建一个内存中的凭据缓存,然后对其进行初始化。
-
现在使用krb5_cc_store_cred将其存储到缓存中
-
使用gss_krb5_import_cred获取GSSAPI令牌
现在您已经拥有了所有必要的预验证信息。您所需要做的就是使用gss_init_sec_context来创建一个输入令牌。
现在有一个好的部分,最新的MIT Kerberos库本机支持SPNEGO。您需要创建一个名为gss_OID的OID结构。对于SPNEGO,即:-
static gss_OID_desc _gss_mech_spnego = { 6, (void *) "x2bx06x01x05x05x02" };
然后将其作为参数传递给gss_init_sec_context。
如果您使用的是旧的MIT Kerberos库,那么我建议您为此使用fbopenssl。您可以查看curl源代码来查看它是如何完成的。