1

我尝试为我的应用程序编写一个 Kerberized 登录模块,但我有一些不清楚的概念。

我正在通过mod_auth_kerb从 Apache HTTP 服务器读取源代码来学习 MIT Kerberos API(找不到更好的起点,没有在线找到 API 教程或演示代码)。从中,我发现我需要通过密钥表文件或用户输入的密码来获取初始机密。让我很困惑的是,我kinit在登录操作系统的时候已经有了,而且我确定我有principal krbtgt/LOCALHOST@LOCALHOSTby的票klist,那么我是否需要再次获得初始机密krb5_get_init_cred_password/keytab

  • 如果是,既然我的操作系统帐户是 Kerberos 中的有效主体,并且我已经获得了 TGS 的票证,我为什么要再次获得初始机密?这不违反 Kerberos 的单点登录功能吗?
  • 如果不是,我如何通过代码获取主体票证 krbtgt/LOCALHOST@LOCALHOST,或者说,我如何将我的登录帐户与相应的 Kerberos 主体关联起来?

顺便说一句,网上有没有好的 MIT Kerberos API 教程?虽然官方的开发者手册是完整的,但从一开始感觉就像从字典里学习第二语言:)。

非常感谢和最好的问候!

4

1 回答 1

4

有两件事: 1. kinit 是一个实用工具,它在代码内部使用 krb5_get_init_cred_pa​​ssword 来获取凭据。2. 然后您可以使用 kvno 实用程序使用通过 kinit 获取的票证来获取服务票证。前任:

 kinit -f adminitrator@XYZ.COM

这样,您将获得管理员票。现在,如果您想将此票证用于某些服务,可以说 CIFS。

 kvno [-k <keytab file> | -c <credential cache>] -u <client> -P service

您可以使用凭证缓存或您可以使用 ktutil 实用程序创建的 keytab 文件。

其次,如果你想从代码中控制一切,你需要了解 krb api 和函数,例如:

krb5_get_init_creds_password

kerb_get_credentials

krb5_get_crendentials_for_user

krb5_get_crendentials_for_proxy 等。

您可以简单地从 MIT kerberos 库中查看 kinit 和 kvno 的源代码,以更好地了解这些函数的使用方式等。

安库尔

于 2013-04-22T13:48:53.600 回答