我们有一个内部开发的基于客户机/服务器的应用程序。客户机和服务器通过TCP/IP连接与特定于应用程序的协议进行通信。客户端运行在Windows上,服务器运行在Linux上。所有计算机都在同一个Active Directory/Kerberos域/领域中。
当前,用户在启动应用程序时输入用户名和密码。服务器检查用户名和密码(身份验证)。根据用户名,服务器还确定对资源的访问(授权)。
当然,必须安全地确定当前Windows用户。
我想出了以下设置:
AcquireCredentialsHandle (Negotiate)
InitializeSecurityContext (Negotiate)
gss_acquire_cred()
gss_accept_sec_context()
这是可行的,但我确实有一些问题:
您在这里描述的是验证用户身份的正确方法。您不必担心用户指定不同的名称;这就是Kerberos为您提供的服务。
如果客户机能够获得服务票证,那么他们必须能够针对KDC(activedirectory)进行身份验证。KDC创建一个包含用户名的服务票证,并用服务的密钥对其进行加密。
客户端将无法使用假名为服务器创建票证,因为它没有加密票证所需的密钥。
它的工作原理有一个相当详细的解释 here .