我正在尝试使用在C ++编写的客户端telnet应用程序中的IBM的iSeries Telnet增强功能RFC 4777中发布的示例创建与System i服务器的单点登录。
给出的代码示例调用 AcquireCredentialsHandle ,然后调用 InitializeSecurityContext 。对 InitializeSecurityContext 的调用会返回错误 SEC_E_TARGET_UNKNOWN ,可能是因为它无法理解我传递的目标名称。
RFC 4777说这个目标名称应该是一个带有kbsrv400的字符串,然后我的服务器名称完全限定为小写。我把它解释为" krbsrv400 / iseries.domain.com"。我在这里尝试了各种组合,但无法正常工作,还没有找到使用MS SSPI API连接到IBM System i的任何其他代码示例。
我知道System i和域上的Kerberos设置工作正常,因为IBM自己的iSeries Access能够使用kerberos登录OK并执行telnet 5250登录。
我正在Windows 7上运行登录域名。该域在Windows 2008中的Active Directory下设置。我使用MS Visual Studio 2005构建我的telnet应用程序。 System i服务器操作系统是V6R1。
有没有人有这个示例代码工作?
使用它与System i交谈时,目标名称的格式应该是什么建议?
谢谢!
其他信息:9/8/2011
在具有Windows 2003管理域的Windows XP客户端下运行正常。
RFC中有两个错误:
1)据说使用" krbsrv400 / spi name"但是看着我在使用iSeries Access登录时生成的kerbtray中的票证,我看到实际的格式是" krbsvr400 / spi name"。
2)RFC说要填充发送给系统i的票证长度,但当我使用Wireshark查看IBM iSeries访问telnet时,我发现他们没有填充它。
在我的Windows XP应用程序中更改上面的单点登录工作正常。我在Windows 7上仍然遇到问题。
这是一个不同的域(由公司管理,在全球的Windows 2008和Windows 2003服务器上管理)和不同的iSeries。
奇怪的是,我可以在System i Access OK中使用Kerberos登录,但是当我查看kerbtray时,我没有像在Windows XP上那样看到系统i机器的kerbsvr400 / ...票证。我的应用程序无效,并因SEC_E_TARGET_UNKNOWN错误而失败。