使用 RFC 4777 中的示例代码 - InitializeSecurityContext 返回错误

发布于 2024-11-18 23:44:30 字数 1425 浏览 10 评论 0原文

我正在尝试使用 IBM 的 iSeries Telnet 增强 RFC 4777 中发布的示例在用 C++ 编写的客户端 telnet 应用程序中创建到 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 执行 telnet 5250 登录。

我正在登录域的 Windows 7 上运行。该域是在 Windows 2008 中的 Active Directory 下设置的。我正在使用 MS Visual Studio 2005 构建我的 telnet 应用程序。 System i服务器操作系统是V6R1。

有人让这个示例代码工作吗?

关于使用它与 System i 对话时目标名称的格式应该是什么有什么建议吗?

谢谢!

附加信息:2011 年 9 月 8 日

在具有 Windows 2003 托管域的 Windows XP 客户端下可以正常工作。

RFC 中有两个错误:

1) 它说使用名称“krbsrv400/spi name”,但是查看我使用 iSeries Access 登录时生成的 kerbtray 中的票证,我发现实际格式是“krbsvr400/ spi 名称”。

2)RFC说要填充发送到系统i的票据长度,但是当我使用Wireshark查看IBM iSeries访问telnet时,我发现他们没有填充它。

更改上述内容使单点登录在 Windows XP 上的我的应用程序中正常工作。我在 Windows 7 上仍然遇到问题。

这是一个不同的域(由公司管理,在世界各地的 Windows 2008 和 Windows 2003 服务器上)并且具有不同的 iSeries。

奇怪的是,我可以在 System i Access 中使用 Kerberos 登录,但当我查看 kerbtray 时,我没有看到系统 i 机器的 kerbsvr400/... 票证,就像我在 Windows XP 上所做的那样。我的应用程序无法运行并失败并出现 SEC_E_TARGET_UNKNOWN 错误。

I am trying to create a single-sign on connection to a System i server using the example published in IBM's iSeries Telnet Enhancements RFC 4777 within a client telnet app written in C++.

The code sample given calls AcquireCredentialsHandle and then a call to InitializeSecurityContext. The call to InitializeSecurityContext returns an error of SEC_E_TARGET_UNKNOWN, presumably because it does not understand the target name I am passing.

The RFC 4777 says this target name should be a string with kbsrv400 then my server name fully qualified in lower case. I interpretted this as "krbsrv400/iseries.domain.com". I've tried a variety of combinations here but can't get anything to work and not yet found any other code samples that use the MS SSPI API to connect to IBM System i.

I know the Kerberos setup on the System i and domain is working OK as IBM's own iSeries Access is able to login OK and perform a telnet 5250 signon using kerberos.

I am running on Windows 7 signed into a domain. The domain is setup under Active Directory in Windows 2008. I'm using MS Visual Studio 2005 to build my telnet app. The System i server OS is V6R1.

Has anyone got this sample code working?

Any advice on what the format of the target name should be when using it to talk to System i?

Thanks!

Additional info: 9/8/2011

Have got this working OK under Windows XP client with a Windows 2003 managed Domain.

There were two errors in the RFC:

1) It said to use a name of "krbsrv400/spi name" but looking at the ticket in kerbtray that was generated when I logged in using iSeries Access, I saw the actual format was "krbsvr400/spi name".

2) The RFC said to pad the ticket length sent to the system i but when I used Wireshark to look at the IBM iSeries access telnet, I found they did not pad it.

Changing the above got single-signon working OK in my app on Windows XP. I am still experiencing problems on Windows 7.

This is a different domain (managed by the company, and on Windows 2008 and Windows 2003 servers across the world) and with a different iSeries.

Strangely, I can use Kerberos login in System i Access OK, but when I look in kerbtray I do not see a kerbsvr400/... ticket for the system i machine like I do on Windows XP. My app does not work and fails with a SEC_E_TARGET_UNKNOWN error.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文