C++ Kerberos管理员授权

C++ Kerberos管理员授权,c++,authorization,kerberos,C++,Authorization,Kerberos,我正在编写与MS Active Directory集成的linux应用程序。为此,我使用Kerberos。我已经实现了使用给定凭据对域用户进行身份验证的机制,但现在我想检查该用户是否是administrators组的成员 因此,我从函数中获得了creds error = krb5_get_init_creds_password(context, &creds, principals, password.c_str(), NULL, NULL, 0, NULL, NULL)

我正在编写与MS Active Directory集成的linux应用程序。为此,我使用Kerberos。我已经实现了使用给定凭据对域用户进行身份验证的机制,但现在我想检查该用户是否是administrators组的成员

因此,我从函数中获得了
creds

error = krb5_get_init_creds_password(context, &creds, principals,
        password.c_str(), NULL, NULL, 0, NULL, NULL);
在这里,我想实现授权用户/管理员的逻辑

if(!error) {
    // admin check
}

我正在考虑使用
krb5\u verify\u init\u creds
函数,但我不确定如何才能做到这一点。

Kerberos不进行授权,只进行身份验证。(即,它可以确定你是谁,但不能确定你被允许做什么)

通常,一旦您有了kerberos ID,您就会询问授权服务允许该ID做什么。在本例中,最简单的方法是进行ldap查询,以确定用户是否是您感兴趣的组中的成员


MS kerberos违反了这一原则,将AD知道的额外组信息添加到kerberos服务票证中。但是,我不知道有任何标准的kerberos API提供对这些信息的访问

Kerberos不进行授权,只进行身份验证。(即,它可以确定你是谁,但不能确定你被允许做什么)

通常,一旦您有了kerberos ID,您就会询问授权服务允许该ID做什么。在本例中,最简单的方法是进行ldap查询,以确定用户是否是您感兴趣的组中的成员


MS kerberos违反了这一原则,将AD知道的额外组信息添加到kerberos服务票证中。但是,我不知道有任何标准的kerberos API提供对这些信息的访问

正如Fred所指出的,Kerberos用于身份验证,而不是授权。虽然AD DC发布的Kerberos票证包含MS-PAC记录,其中包含有关映射到此Kerberos主体的AD对象的成员身份的附加信息,但要使用它,您需要的不仅仅是了解票证中显示的记录的格式

在典型的Linux环境中,应用程序最好依靠PAM堆栈来解耦身份验证和授权步骤。通常,PAM会话设置用于运行授权检查。如果您的Linux机器配置为使用SSSD(使用
id\u provider=ad
id\u provider=ipa
和FreeIPA与ad之间的跨林信任),您可以依靠
pam\u sss
通过SSSD处理身份验证和授权步骤

SSSD的最新版本通过将GPO登录权限映射到PAM服务来支持基于GPO的访问

使用SSSD,您的广告用户和组将显示为POSIX用户和组。这允许您基于组成员身份构建一个简单的访问控制,在您使用
krb5\u aname\u to\u localname()
将Kerberos主体映射到本地用户名后,您可以通过
getgrouplist(3)
调用获得该组成员身份


如果您仍然需要了解有关从Kerberos主体映射的用户的其他信息,可以利用SSSD的infopipe接口。通过infopipe提供的信息既可以从Kerberos票证(如果可用)中收集,也可以从AD LDAP(全局目录或直接从DC中收集)中收集。通过使用infopipe,您无需像SSSD为您所做的那个样,将MS-PAC中的SID解析为名称、解析组成员身份以及验证MS-PAC和票证其他组件的签名。有关实际实现,请参见和。

正如Fred所指出的,Kerberos用于身份验证,而不是授权。虽然AD DC发布的Kerberos票证包含MS-PAC记录,其中包含有关映射到此Kerberos主体的AD对象的成员身份的附加信息,但要使用它,您需要的不仅仅是了解票证中显示的记录的格式

在典型的Linux环境中,应用程序最好依靠PAM堆栈来解耦身份验证和授权步骤。通常,PAM会话设置用于运行授权检查。如果您的Linux机器配置为使用SSSD(使用
id\u provider=ad
id\u provider=ipa
和FreeIPA与ad之间的跨林信任),您可以依靠
pam\u sss
通过SSSD处理身份验证和授权步骤

SSSD的最新版本通过将GPO登录权限映射到PAM服务来支持基于GPO的访问

使用SSSD,您的广告用户和组将显示为POSIX用户和组。这允许您基于组成员身份构建一个简单的访问控制,在您使用
krb5\u aname\u to\u localname()
将Kerberos主体映射到本地用户名后,您可以通过
getgrouplist(3)
调用获得该组成员身份

如果您仍然需要了解有关从Kerberos主体映射的用户的其他信息,可以利用SSSD的infopipe接口。通过infopipe提供的信息既可以从Kerberos票证(如果可用)中收集,也可以从AD LDAP(全局目录或直接从DC中收集)中收集。通过使用infopipe,您无需像SSSD为您所做的那个样,将MS-PAC中的SID解析为名称、解析组成员身份以及验证MS-PAC和票证其他组件的签名。有关实际实施,请参阅和