如何在wamp路由器验证器中获取会话上下文

时间:2014-10-17 11:47:55

标签: twisted autobahn

根据评论和对问题的批评过于宽泛;我会尝试使其更具体;

环境 - 服务器:高速公路| python with twisted,wampv2

鉴于:

a)我有一个扩展了RouterSession并对用户进行身份验证的类,并且在验证时知道用户访问wamp服务的是谁; 和

b)我有一个扩展ApplicationSession的类,在创建时通过wamp暴露了几个rpc方法

如何在公开的RPC方法中访问用户数据。用户数据 - 我的意思是 - 我通过RouterSession在特定客户端连接的开头验证了这一点。 因为ApplicationSessions只启动一次,并且没有关于调用者的线索(从我在调试器中看到的)。

我需要这个的原因 - 是用调用用户的上下文执行rpc调用。方法的结果可能取决于特定的用户配置文件属性。

我可能正在寻找可以代表每个连接创建的应用程序实例的东西(然后可以保存对授权结果和数据的引用)。像大多数服务器一样,Protocols在twisted中运行。

----------------- ORIGINAL POST -----------

简短问题:想象一下用户权利不是基于方法而是基于对象的场景;示例 - 我可能有权编辑我的个人资料帐户和我的下属的个人资料帐户,但不能编辑任何其他帐户。这留下了一种情况,我会通过WAMP向所有人公开“com.myorg.profile.update_profile_details”RPC,但是必须检查哪个用户正在尝试修改哪个配置文件。 我看到WAMP路由器中有一个验证机制来处理验证请求 - 但似乎它缺少对先前验证结果或会话的引用。 我真的想避免通过WAMP来回传递会话密钥(或者,上帝禁止授权代币);对于这个建议的方法是什么?

----------------原发帖子结束----------

1 个答案:

答案 0 :(得分:2)

在来回调试跟踪之后,我找到了一个适合我的解决方案 - 诀窍是在注册RPC方法时传递其他选项参数:

self.register(self.test_me_now, 'com.ossnet.testme', options = RegisterOptions(details_arg = 'details', discloseCaller = True))

并且瞧 - 注册的RPC方法中有一个新的传入参数:'详细信息' 以下内容:

CallDetails: CallDetails(progress = None, caller = 774234234575675677138, authid = johan.gram, authrole = user, authmethod = ticket)