高级问题:如何配置 Crossbar 以通过有权访问用户 DB 的 Web 服务器对 WAMP 客户端进行身份验证。
描述:
使用crossbar 动态认证,WAMP 节点(可以访问用户 DB)可以注册认证功能,如下所示。
def authenticate(realm, authid, details):
## return credentials (secret + role) for user 'authid'
return {'secret': 'mypassword', 'role': 'sales'}
yield self.register(authenticate, 'com.example.authenticate')
当然,crossbar 也将配置动态身份验证。
"auth": {
"wampcra": {
"type": "dynamic",
"authenticator": "com.example.authenticate"
}
}
就我而言,用户 DB 使用 Django HTTP REST 服务器,它不是常规的 WAMP 客户端。
但是,我看到 crossbar HTTP Bridge Service 提供了这个HTTP Callee REST API。我看到您可以配置交叉开关来注册一个 WAMP 程序(例如 com.myapp.rest),该程序将请求发送到 HTTP 服务器(例如https://httpbin.org/),如下所示。
"type": "class",
"classname": "crossbar.adapter.rest.RESTCallee",
"realm": "realm1",
"extra": {
"procedure": "com.myapp.rest",
"baseurl": "https://httpbin.org/"
}
综观上面,我正在考虑为我的 Web 服务器提供身份验证功能(根据我的理解),如下所示。
- 当一个普通的 WAMP 客户端想要连接到路由器时,crossbar 会发出 RPC 调用来进行身份验证。
- 然后使用 HTTP Callee 服务,crossbar 会将 WAMP 过程转换为 HTTP 请求,该请求将到达我的 Web 服务器。
- 在我的 Web 服务器中,我将提取身份验证参数,对用户进行身份验证并返回成功/失败响应。
所以看起来,它可以工作。
但是,我看到从 WAMP 客户端调用该过程有特殊的语法。
@inlineCallbacks
def onJoin(self, details):
res = yield self.call("com.myapp.rest",
method="GET",
url="",
params={
.....
})
这与您调用常规 RPC 的方式不同
res = yield self.call(u'com.myapp.add2', 2, 3).
问题:是否可以按照我的建议(步骤 1 到 3)让交叉开关从我的 Web 服务器请求身份验证信息。