我正在使用具有多个ServerMethods类的Datasnap服务器。然后通过TDSHTTPService正常通过HTTP / S等公开它们。我现在正在尝试实现适合每个服务区/上下文/领域的不同身份验证。这似乎应该可以使用Datasnap TDSAuthenticationManager OnUserAuthenticate事件中的“Context”参数来改变所使用的身份验证检查。但是我遇到了问题:
我尝试了什么:
1)将客户端TSQLConnection.Driver.DatasnapContext从“datasnap”更改为“datasnaptest”,并将相应的服务器端TDSHTTPService.DSContext从“datasnap /”更改为“datasnaptest /”。尝试连接成功但在OnUserAuthenticate事件中“Context”参数为空。因此我尝试了以下方法:
2)将客户端TSQLConnection.Driver.DatasnapContext从“datasnap”更改为例如“datasnap / test”,并将相应的服务器端TDSHTTPService.DSContext从“datasnap /”更改为“datasnap / test /”。尝试连接失败时,请求/ datasnap / test / tunnel中的'HTTP / 1.1 404预期datasnap上下文'。
3)恢复TSQLConnection.Driver.DatasnapContext,然后将客户端TSQLConnection.Driver.URLPath从“”更改为“test”,并相应地将服务器端TDSHTTPService.DSContext更改为“test / datasnap /”。 Attepmting然后连接类似地失败了'HTTP / 1.1 404在request / test / datasnap / tunnel中的预期datasnap上下文。'
简而言之: 如何在Delphi 10 Seattle Datasnap服务器中正确管理不同的身份验证(与不同/多个服务器类相关,因此在不同的URL / Realms下从HTTP公开)?
其他背景我们有几个应用服务器和Web服务/接口(Webbroker / SOAP和旧学校数据),我们希望在新的样式datasnap框架下统一/现代化。
答案 0 :(得分:0)
可能您不能(或不应该)更改'datasnap'上下文。可能是因为OnUserAuthenticate事件处理程序的上下文参数不是以这种方式使用的。
然而:
在我看来,通过使用自定义属性,授权和拒绝角色,你可以在没有它的情况下相处得很好。
具体来看看Bob Swart的教程视频(和白皮书) DataSnap in Action 2 - DataSnap Server Security 在认证和授权方面,这将使您走上正确的轨道。