0

高级问题:如何配置 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 服务器提供身份验证功能(根据我的理解),如下所示。

  1. 当一个普通的 WAMP 客户端想要连接到路由器时,crossbar 会发出 RPC 调用来进行身份验证。
  2. 然后使用 HTTP Callee 服务,crossbar 会将 WAMP 过程转换为 HTTP 请求,该请求将到达我的 Web 服务器。
  3. 在我的 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 服务器请求身份验证信息。

4

0 回答 0