Delphi 7 SOAP 身份验证和会话 ID 如何

Posted

技术标签:

【中文标题】Delphi 7 SOAP 身份验证和会话 ID 如何【英文标题】:Delphi 7 SOAP Authentication and SessionID HowTo 【发布时间】:2010-05-13 14:07:29 【问题描述】:

我正在开发一个 3 层数据库应用程序。 1.) MS SQL 数据库 2.) 连接到数据库的中间层 SOAP 服务器(使用 Delphi 7) 3.) 客户端(首先是 win32 gui(使用 Delphi 7)-后来是其他平台)连接到 SOAP 服务器

我选择了一个 SOAP 服务器,以便在稍后阶段向各种客户端开放(还有一些 win32 gui 客户端将驻扎在国外 - 所以客户端需要瘦)(这是 Bob 博士建议的)。

我是 SOAP 新手,并且一直在查看有关身份验证的不同示例和论文。但我无法完全理解它。

我已经使用 Delphi 的 SOAP 服务器应用程序向导制作了一个 SOAP 服务器和客户端,并添加了一个 SOAP SERVER 数据模块,添加了一个数据库连接以及一些数据集和提供程序。将客户端与 dbgrid 等连接起来,该部分工作正常。

但我希望客户端首先登录然后能够访问数据,并且我希望服务器记录每个连接以及客户端注销或断开连接时,所以我猜我需要 sessionID 和超时。我还希望服务器能够在任何给定时间告诉客户端还有谁“连接”(或谁的会话仍处于活动状态)。 我已经收集到我需要制作一个身份验证标头,但无法弄清楚我可以在哪里或谁可以获得 sessionID。我假设每次客户端连接到服务器时服务器都会生成一个 sessionID?我怎么得到这个?

任何帮助或建议/指针将不胜感激,

谢谢 贾斯汀

【问题讨论】:

【参考方案1】:

默认情况下,Soap 服务器不提供会话。您的服务器必须实现会话生命周期管理(登录/注销)等。

这里记录了一个基本解决方案:Managing sessions with Delphi 6 Web services

但请注意,此解决方案远非完美(参见 cmets),例如它不提供会话超时机制。

【讨论】:

【参考方案2】:

好的 - 想通了 - 我没有:

InvRegistry.RegisterHeaderClass(TypeInfo(IThorPayServerDB), TAuthHeader);

在初始化中


但我仍然不知道如何获取会话 ID - 或者一些知道哪个客户端会话登录到服务器的独特方式 - 有什么想法吗?

【讨论】:

【参考方案3】:

Delphi XE 使用了更新版本的 SOAP,也许这就是答案:

https://forums.embarcadero.com/thread.jspa?messageID=200793

【讨论】:

以上是关于Delphi 7 SOAP 身份验证和会话 ID 如何的主要内容,如果未能解决你的问题,请参考以下文章

始终在soap客户端php中作为无效会话令牌获得响应

在 Kong 中启用基本身份验证和会话插件时如何获取用户 ID?

Delphi SOAP 调用显示 IE 登录对话框 - 如何防止它?

使用 Express 会话反应本机身份验证?

asp.net cookie、身份验证和会话超时

Laravel 7 手动身份验证会话问题