相关疑难解决方法(0)

如何在WebSocket JavaScript中发布请求标头Cookie

因此,基本上我想通过我的websocket获得身份验证,并且需要身份验证所需的cookie,因此如何将请求的cookie发布到js中的websocket中。

这是我的代码

var uri = 'ws://' + window.location.hostname + window.location.pathname.replace('default.htm', '') + 'chat.ashx?username=' + username;
websocket = new WebSocket(uri);
Run Code Online (Sandbox Code Playgroud)

javascript cookies header websocket

5
推荐指数
1
解决办法
2万
查看次数

如何在 websocket javascript 客户端中传递授权承载访问令牌

我的 API 管理器工具要求我应该通过 websocket 调用传递授权承载访问令牌。他们在其中提供了 Java 代码示例。

不记名令牌设置为 ("Authorization", "Bearer e2238f3a-e43c-3f54-a05a-dd2e4bd4631f") 。我如何在 javascript 中做到这一点?

// HttpResponseDecoder to WebSocketHttpResponseDecoder in the pipeline.
final WebSocketClientHandler handler = new WebSocketClientHandler(
    WebSocketClientHandshakerFactory
        .newHandshaker(uri, WebSocketVersion.V13, null, 
            false, new DefaultHttpHeaders()
                .add("Authorization", "Bearer e2238f3a-e43c-3f54-a05a-dd2e4bd4631f"))); 
Run Code Online (Sandbox Code Playgroud)

这就是他们在 java 中的做法 有没有办法从我的 java 脚本 [Angular2] Web 应用程序中做到这一点?我如何从 UI 传递这个?任何基于 Websocket 的测试工具都可以模拟这一点?

javascript java authorization websocket socket.io

5
推荐指数
1
解决办法
2万
查看次数

使用 Javascript Websockets 将标头传递给 Django 通道,以使用 Token 对用户进行身份验证

我不知道如何使用令牌身份验证连接和身份验证 django 通道,因为 javascript websockets 不支持将标头传递给服务器

class TokenAuthMiddleware:
    """
    Token authorization middleware for Django Channels 2
    """

    def __init__(self, inner):
        self.inner = inner

    def __call__(self, scope):
        headers = dict(scope['headers'])
        if b'authorization' in headers:
            try:
                token_name, token_key = headers[b'authorization'].decode().split()
                if token_name == 'Token':
                    token = Token.objects.get(key=token_key)
                    scope['user'] = token.user
            except Token.DoesNotExist:
                scope['user'] = AnonymousUser()
        return self.inner(scope)

TokenAuthMiddlewareStack = lambda inner: TokenAuthMiddleware(AuthMiddlewareStack(inner))
Run Code Online (Sandbox Code Playgroud)

我找到了有关使用令牌进行身份验证的答案,但问题是我不明白如何将标头传递给服务器

    token = Token.objects.get(key='175f76fd9b63a9477bf5f9a6f2e9a7f12ac62d65')
            if token.user:
                scope['user'] = token.user
            else:
                scope['user'] = AnonymousUser()
            return self.inner(scope)

TokenAuthMiddlewareStack = lambda inner: TokenAuthMiddleware(AuthMiddlewareStack(inner)) …
Run Code Online (Sandbox Code Playgroud)

python django websocket django-channels

5
推荐指数
0
解决办法
708
查看次数

Javascript websocket客户端库,可以在握手请求中传递自定义标头

我需要一个javascript库连接到我的web-socket服务器,这是使用python twisted实现的.我尝试了Native javascript web-socket客户端,但它没有根据此链接传递自定义标头的选项.我的Web套接字服务器通过从Oauth2标准中的握手头中获取auth_token来进行身份验证.是否有任何javascript库可用于Web套接字客户端,允许在连接时传递自定义标头?

javascript websocket

3
推荐指数
1
解决办法
9156
查看次数

extraHeaders 在 socket.io-client 中不起作用

嗨,我的代码在 Nodejs 中看起来像这样,它有效!

但是当我尝试在 nwjs 应用程序中使用完全相同的代码时,却没有!因为当我嗅探并看到它认为它在网络浏览器下运行并且它尝试使用 nwjs 的 chromium 浏览器的本机功能时。

function connecttest(domain)
{
socket = require('socket.io-client')('https://ws.'+domain.replace('www.').replace('m.'),{
  forceNode:true,
  transports: ['websocket'],
  extraHeaders: {
      'Origin': 'https://www.'+domain.replace('www.').replace('m.')
  },
  transportOptions: {
    polling: {
      extraHeaders: {
        'Origin': 'https://www.'+domain.replace('www.').replace('m.')
      }
    }
  }
});
socket.on('connect',  function(socket){
    console.log("ok");
socket.emit('query', {"body":{"siteId":"9","source":1,"lang":"tr"},"action":"site.session","frontEndId":0,"token":null});
socket.on('response', function(data){
console.log(data);
});

});
}
Run Code Online (Sandbox Code Playgroud)

提琴手嗅探

如您所见,它无法设置正确的原始标头

但

但它可以在普通的nodejs脚本下工作

node.js socket.io nwjs

3
推荐指数
1
解决办法
8246
查看次数

Vertx SockJs Eventbus 认证

我正在尝试从前端到 vertx 后端建立 sock.js 连接。

我最初的尝试是这样的:

let token = '<the token>';
let data = {'Authorization' : 'Bearer ' + token};
let eb = new EventBus("http://localhost:8080/eventbus");
  eb.onopen = function () {
  eb.registerHandler('notifications', data, (err, msg) =>  {
    // handle the response
  });
}
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为我需要发送有关 EventBus 创建的身份验证数据,即使官方 sock.js 文档指出这不受支持。显然现在发送new EventBus("http://localhost:9090/eventbus", data)也不起作用。

https://github.com/sockjs/sockjs-node#authorisation

我的后端处理程序:

final BridgeOptions bridgeOptions = new BridgeOptions()
  .addOutboundPermitted(new PermittedOptions().setAddress("notifications"))

final SockJSHandler sockJSHandler = SockJSHandler.create(vertx).bridge(bridgeOptions, event -> {
  event.complete(true);
});

router.route("/eventbus/*").handler(ctx -> {
  String token = ctx.request().getHeader("Authorization"); // null …
Run Code Online (Sandbox Code Playgroud)

websocket event-bus vert.x sockjs

2
推荐指数
1
解决办法
2034
查看次数

带有授权标头的 Websocket 连接

我正在开发一个实时 websocket 应用程序,其中服务器使用 .Net 核心进行编码,而客户端可以使用多种不同的语言。我决定保护服务器的方式是 JWT,即只接受来自具有有效 JWT 的请求的套接字连接。我可以用 .Net 客户端成功地做到这一点,这是我的代码:

        _client = new WebSocket("ws://localhost:8080/api/SocketDock","",null,new List<KeyValuePair<string, string>>()
        { new KeyValuePair<string, string>(
            "Authorization", "Bearer eyJhbGciOiJIUzI1.....") 
        });
Run Code Online (Sandbox Code Playgroud)

这与 .net 核心客户端 websocket 完美配合。但是,我无法对 Angular 客户端做同样的事情。我以某种方式浏览了几篇文章,最终得到了不可能的答案。然而,在我看来,如果协议或握手在一种语言中是可能的,那么在其他语言中也必须是可能的。

有人可以指导我以正确的方式与任何 Angular 客户端实现相同的目标吗?

header websocket jwt angular

0
推荐指数
1
解决办法
7627
查看次数