0

我正在开发一个需要使用协商通过代理进行身份验证的应用程序。用户可能没有安装 Kerberos 客户端。我正在尝试使用 MIT Kerberos 库来实现这一点,以避免平台依赖性。我已经使用 krb5_get_init_creds_password 成功获得了 TKT 并验证了它 krb5_verify_init_creds。现在我想创建 SPNEGO 令牌以使用此 TKT 在 HTTP 标头中发送。谁能告诉我创建 SPNEGO 令牌的任何 API 或方法?

4

1 回答 1

1

您可以为此目的使用 gss_init_sec_context。

一些背景:-

SPNEGO 是 kerberos 之上的抽象,用于基于 HTTP 的通信(尽管它不使用安全上下文进行加密)

为此目的,请执行以下操作:-

  1. 现在您有了 krb5_get_init_creds_password 和 krb5 mech 凭证,使用 krb5_cc_new_unique 创建一个内存凭证缓存,然后对其进行初始化。

  2. 现在使用 krb5_cc_store_cred 将其存储到该缓存中

  3. 使用 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 回答