我正在开发一个需要使用协商通过代理进行身份验证的应用程序。用户可能没有安装 Kerberos 客户端。我正在尝试使用 MIT Kerberos 库来实现这一点,以避免平台依赖性。我已经使用 krb5_get_init_creds_password 成功获得了 TKT 并验证了它 krb5_verify_init_creds。现在我想创建 SPNEGO 令牌以使用此 TKT 在 HTTP 标头中发送。谁能告诉我创建 SPNEGO 令牌的任何 API 或方法?
问问题
2845 次
1 回答
1
您可以为此目的使用 gss_init_sec_context。
一些背景:-
SPNEGO 是 kerberos 之上的抽象,用于基于 HTTP 的通信(尽管它不使用安全上下文进行加密)
为此目的,请执行以下操作:-
现在您有了 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 *) "\x2b\x06\x01\x05\x05\x02" };
然后将此作为参数传递给 gss_init_sec_context。
如果您使用的是较旧的 MIT Kerberos 库,那么我建议您为此使用 fbopenssl。您可以查看 curl 源代码以了解它是如何完成的。
于 2013-11-02T18:25:12.337 回答